#include <iostream> #include <cstdio> using namespace std; long long potegi[20]; int n, dlugosc, koniec, dl; long long a, ksero, poczatek, result; int main () { potegi[0] = 1; for (int i = 1; i < 19; ++i) potegi[i] = 10 * potegi[i - 1]; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%lld", &a); dl = 0; ksero = a; while (ksero) { ksero /= 10; dl++; } if (dl > dlugosc) { dlugosc = dl; poczatek = a; continue; } if (dl == dlugosc) { if (poczatek < a) { poczatek = a; continue; } dlugosc++; poczatek = a * 10; result++; continue; } if (dlugosc < 18) { ksero = poczatek / potegi[dlugosc - dl]; if (a < ksero) { poczatek = a * potegi[dlugosc - dl + 1]; dlugosc++; result += (long long)(dlugosc - dl); continue; } if (a > ksero) { poczatek = a * potegi[dlugosc - dl]; result += (long long)(dlugosc - dl); continue; } if ((poczatek % potegi[dlugosc - dl]) + 1 == potegi[dlugosc - dl]) { poczatek = a * potegi[dlugosc - dl + 1]; dlugosc++; result += (long long)(dlugosc - dl); continue; } poczatek++; result += (long long)(dlugosc - dl); continue; } ksero = poczatek / potegi[18 - dl]; if (a < ksero) { dlugosc++; poczatek = a * potegi[18 - dl]; result += (long long)(dlugosc - dl); continue; } if (a > ksero) { poczatek = a * potegi[18 - dl]; result += (long long)(dlugosc - dl); continue; } poczatek++; result += (long long)(dlugosc - dl); continue; } printf("%lld\n", result); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include <iostream> #include <cstdio> using namespace std; long long potegi[20]; int n, dlugosc, koniec, dl; long long a, ksero, poczatek, result; int main () { potegi[0] = 1; for (int i = 1; i < 19; ++i) potegi[i] = 10 * potegi[i - 1]; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%lld", &a); dl = 0; ksero = a; while (ksero) { ksero /= 10; dl++; } if (dl > dlugosc) { dlugosc = dl; poczatek = a; continue; } if (dl == dlugosc) { if (poczatek < a) { poczatek = a; continue; } dlugosc++; poczatek = a * 10; result++; continue; } if (dlugosc < 18) { ksero = poczatek / potegi[dlugosc - dl]; if (a < ksero) { poczatek = a * potegi[dlugosc - dl + 1]; dlugosc++; result += (long long)(dlugosc - dl); continue; } if (a > ksero) { poczatek = a * potegi[dlugosc - dl]; result += (long long)(dlugosc - dl); continue; } if ((poczatek % potegi[dlugosc - dl]) + 1 == potegi[dlugosc - dl]) { poczatek = a * potegi[dlugosc - dl + 1]; dlugosc++; result += (long long)(dlugosc - dl); continue; } poczatek++; result += (long long)(dlugosc - dl); continue; } ksero = poczatek / potegi[18 - dl]; if (a < ksero) { dlugosc++; poczatek = a * potegi[18 - dl]; result += (long long)(dlugosc - dl); continue; } if (a > ksero) { poczatek = a * potegi[18 - dl]; result += (long long)(dlugosc - dl); continue; } poczatek++; result += (long long)(dlugosc - dl); continue; } printf("%lld\n", result); return 0; } |