#include <stdio.h> #include <stdint.h> int64_t numberOfDigits(int64_t value) { if (value == 0) return 0; int64_t total = 0; while (value > 0) { value /= 10; ++total; } return total; } int main() { int n; scanf("%u", &n); int64_t total = 0; int64_t last = 0; int64_t digitsOverflow = 0; for (int i = 0; i < n; ++i) { int64_t value; scanf("%lu", &value); if (last == 0) { last = value; continue; } int64_t multiplier = 1; int64_t increases = 0; int64_t digits = numberOfDigits(value); while (digits < 19) { if (last < value * multiplier) { value = value * multiplier; break; } else if ((last >= value * multiplier) && last < ((value + 1) * multiplier - 1)) { value = last + 1; break; } multiplier *= 10; increases++; digits++; } if (digits == 19) { digitsOverflow++; increases--; value = value * (multiplier / 10); } increases += digitsOverflow; total += increases; last = value; //printf("value: %lu inc: %lu over: %lu\n", value, increases, digitsOverflow); } printf("%lu\n", total); 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 | #include <stdio.h> #include <stdint.h> int64_t numberOfDigits(int64_t value) { if (value == 0) return 0; int64_t total = 0; while (value > 0) { value /= 10; ++total; } return total; } int main() { int n; scanf("%u", &n); int64_t total = 0; int64_t last = 0; int64_t digitsOverflow = 0; for (int i = 0; i < n; ++i) { int64_t value; scanf("%lu", &value); if (last == 0) { last = value; continue; } int64_t multiplier = 1; int64_t increases = 0; int64_t digits = numberOfDigits(value); while (digits < 19) { if (last < value * multiplier) { value = value * multiplier; break; } else if ((last >= value * multiplier) && last < ((value + 1) * multiplier - 1)) { value = last + 1; break; } multiplier *= 10; increases++; digits++; } if (digits == 19) { digitsOverflow++; increases--; value = value * (multiplier / 10); } increases += digitsOverflow; total += increases; last = value; //printf("value: %lu inc: %lu over: %lu\n", value, increases, digitsOverflow); } printf("%lu\n", total); return 0; } |