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>
#include <string>

using namespace std;

typedef unsigned long int ul;
typedef string s;

s generujZera(ul d);

#define REP(x, y, z) for(ul z = x; z < y; z++)
#define REPE(x, y, z) for(ul z = x; z <= y; z++)

int main()
{
	ul ilosc_danych, int_bufor, wynik = 0;
	s str_bufor;
	scanf("%lu", &ilosc_danych);

	s* str_dane = new s[ilosc_danych];
	ul* int_dane = new ul[ilosc_danych];

	REP(0, ilosc_danych, i)
	{
		scanf("%lu", &int_bufor);
		int_dane[i] = int_bufor;
		str_dane[i] = to_string(int_bufor);
	}

	REP(1, ilosc_danych, i)
	{
		if (int_dane[i - 1] >= int_dane[i])
		{
			int_bufor = atoi(str_dane[i - 1].substr(0, str_dane[i].length()).c_str());

			if (int_bufor > int_dane[i]) //Dodanie tylu zer, aby dlugosc rozpatrywanej liczby byla o 1 wieksza od dlugosci poprzedniej
			{
				wynik += (str_dane[i - 1].length() - str_dane[i].length() + 1);
				str_dane[i] += generujZera((str_dane[i - 1].length() - str_dane[i].length() + 1));
				int_dane[i] = atoi(str_dane[i].c_str());
			}

			else if (int_bufor == int_dane[i])
			{
				ul ilosc_dziewiatek = 0;

				REP(str_dane[i].length(), str_dane[i - 1].length(), j)
				{
					str_bufor = str_dane[i - 1].substr(j, 1);

					if (str_bufor == "9")
						++ilosc_dziewiatek;
				}

				if ((ilosc_dziewiatek == (str_dane[i - 1].length() - str_dane[i].length() + 1)) || (str_dane[i - 1].length() == str_dane[i].length())) //Dodanie tylu zer, aby dlugosc rozpatrywanej liczby byla o 1 wieksza od dlugosci poprzedniej
				{
					wynik += (str_dane[i - 1].length() - str_dane[i].length() + 1);
					str_dane[i] += generujZera((str_dane[i - 1].length() - str_dane[i].length() + 1));
					int_dane[i] = atoi(str_dane[i].c_str());
				}

				else //Dodanie tylu cyfr, aby rozpatrywana wartosc byla o jeden wieksza od poprzedniej
				{
					wynik += (str_dane[i - 1].length() - str_dane[i].length());
					int_dane[i] = int_dane[i - 1] + 1;
					str_dane[i] = to_string(int_dane[i]);
				}
			}

			else //Dodanie tylu zer, aby dlugosc rozpatrywanej liczby byla rowna dlugosci poprzedniej
			{
				wynik += (str_dane[i - 1].length() - str_dane[i].length());
				str_dane[i] += generujZera((str_dane[i - 1].length() - str_dane[i].length()));
				int_dane[i] = atoi(str_dane[i].c_str());
			}
		}
	}

	printf("%lu", wynik);
}

s generujZera(ul d)
{
	s bufor = "";

	REP(0, d, i)
		bufor += "0";

	return bufor;
}