#include<iostream>
#include <math.h>
using namespace std;
int iloscCyfr(long long liczba) {
return (int)log10(liczba) + 1;
}
long long potega(long long liczba, int wykladnik) {
long long wynik = 1;
for (int i = 0; i < wykladnik; i++) {
wynik = wynik * liczba;
}
return wynik;
}
bool jestPrefixem(long long prefix, long long liczba) {
while (liczba >= prefix) {
if (liczba == prefix) {
return true;
}
liczba = liczba / 10;
}
return false;
}
int main()
{
std::ios_base::sync_with_stdio(false);
int n;
cin >> n;
long long wynik = 0;
long long liczba;
long long poprzednia;
cin >> poprzednia;
long long extraZera = 0;
for (int i = 1; i < n; i++) {
cin >> liczba;
bool prefix = jestPrefixem(liczba, poprzednia);
int dopisaneZera = 0;
while (iloscCyfr(liczba) < iloscCyfr(poprzednia)) {
liczba *= 10;
dopisaneZera++;
wynik++;
}
if (prefix) {
if (poprzednia - liczba + 1 < potega(10, dopisaneZera)) {
liczba = poprzednia + 1;
}
else {
liczba *= 10;
wynik++;
}
}
else {
if (liczba < poprzednia) {
liczba *= 10;
wynik++;
}
}
wynik += extraZera;
while (liczba > 1000000000000LL) {
extraZera++;
liczba = liczba / 10;
}
poprzednia = liczba;
}
cout << wynik << endl;
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 92 93 94 95 96 97 | #include<iostream> #include <math.h> using namespace std; int iloscCyfr(long long liczba) { return (int)log10(liczba) + 1; } long long potega(long long liczba, int wykladnik) { long long wynik = 1; for (int i = 0; i < wykladnik; i++) { wynik = wynik * liczba; } return wynik; } bool jestPrefixem(long long prefix, long long liczba) { while (liczba >= prefix) { if (liczba == prefix) { return true; } liczba = liczba / 10; } return false; } int main() { std::ios_base::sync_with_stdio(false); int n; cin >> n; long long wynik = 0; long long liczba; long long poprzednia; cin >> poprzednia; long long extraZera = 0; for (int i = 1; i < n; i++) { cin >> liczba; bool prefix = jestPrefixem(liczba, poprzednia); int dopisaneZera = 0; while (iloscCyfr(liczba) < iloscCyfr(poprzednia)) { liczba *= 10; dopisaneZera++; wynik++; } if (prefix) { if (poprzednia - liczba + 1 < potega(10, dopisaneZera)) { liczba = poprzednia + 1; } else { liczba *= 10; wynik++; } } else { if (liczba < poprzednia) { liczba *= 10; wynik++; } } wynik += extraZera; while (liczba > 1000000000000LL) { extraZera++; liczba = liczba / 10; } poprzednia = liczba; } cout << wynik << endl; return 0; } |
English