/* tipi: int -- 32 bitno (+- 2^31 ~= 2 * 10^9) int64_t (long long) 64 bitno (+- 2^63 ~= 10^18) unsiged int -- 32 bit, 0 -- 4*10^9 decimalna: float, *double* operacije: +, *, -, / --- ^ NI POTENCA (a/b)*b + (a%b) == a */ #include #include #include #include using namespace std; int MOD = 1000000007; int sestej_stevke(int a, int b=10) { int v = 0; while (a > 0) { v += a % b; // pristejem zadnjo stevko a /= b; // "zbrisem" zadnjo stevko } return v; } string v_sistem(int a, int b=10) { assert(b >= 2); assert(b <= 16); string STEVKE = "0123456789abcdef"; string s; while (a > 0) { s.push_back(STEVKE[a % b]); // pristejem zadnjo stevko a /= b; // "zbrisem" zadnjo stevko } reverse(s.begin(), s.end()); return s; } int v_desetisko(string s, int b=10) { // 121012 v 3 // 2 + 1*3 + 0*3*3 + 1*3*3*3 + 2*3*3*3*3 + 1*3*3*3*3*3 // 2 + 3*(1 + 3*(0 + 3*(1 + 3*(2+ 3*1))))) int n = s.size(); int r = 0; for (int i = 0; i < n; ++i) { // int c = ('a' <= s[i] && s[i] <= 'f') ? 10 + s[i] - 'a' : s[i] - '0'; int c; if ('a' <= s[i] && s[i] <= 'f') { c = 10 + s[i] - 'a'; } else if ('0' <= s[i] && s[i] <= '9') { c = s[i] - '0'; } else { throw std::runtime_error("invalid character: "s + s[i]); } // int c = pogoj ? 1 : 0; // 'a' --- tip `char` -- koda znaka po ASCII tabeli r *= b; r += c; } // 2 + n*4 operacij == ~n == O(n) /* dve različni implementaciji istega algorimhma z razlicno časovno zahtevnostjo */ int r2 = 0; for (int i = 0; i < n; ++i) { int c = 'a' <= s[i] && s[i] <= 'f' ? 10 + s[i] - 'a' : s[i] - '0'; for (int j = 0; j < n-1-i; ++j) { c *= b; } r2 += c; } // 2 + 3*n + (1 + 2 + 3 + ... + n-1) == ~n^2/2 + ... = O(n^2) return r; } int main() { // cout << "Hello world" << endl; // int64_t a = 6; // for (int i = 0; i < 1000000; ++i) { // a += 10000; // a %= MOD; // } // cout << a << endl; /* cout << 3/4 << endl; cout << (-1)/2 << endl; cout << 3 % 4 << endl; cout << (-1) % 2 << endl; */ int a; cin >> a; cout << sestej_stevke(a) << endl; cout << sestej_stevke(a, 2) << endl; string s1 = v_sistem(a, 10); string s2 = v_sistem(a, 2); string s3 = v_sistem(a, 16); cout << v_desetisko(s1, 10) << endl; cout << v_desetisko(s2, 2) << endl; cout << v_desetisko(s3, 16) << endl; // cout << v_sistem(a, 1) << endl; // cout << v_sistem(a, 0) << endl; return 0; }