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
#include <iostream>
#include <string>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
//	string a,b;
//	cin >> a >> b;



    string s1, s2, s3;
    int p, w, i, j, k, n;

    // odczytujemy liczby do dodawania

    cin >> s1 >> s2;

    // obliczamy długości każdego z łańcuchów

    i = s1.length();
    j = s2.length();

    // w n wyznaczamy długość najkrótszego łańcucha

    n = i; if (j < i) n = j;

    // zerujemy przeniesienie oraz łańcuch wynikowy

    p = 0;

    s3 = "";

    // sumujemy kolejne od końca cyfry obu łańcuchów

    for (k = 1; k <= n; k++)
    {
        w = (int)(s1[--i]) + (int)(s2[--j]) + p - 96;
        p = w / 10;
        s3 = (char)((w % 10) + 48) + s3;
    }

    // jeśli łańcuch s1 ma jeszcze cyfry, to dodajemy do nich
    // przeniesienia i umieszczamy w łańcuchu wynikowym

    while (i)
    {
        w = s1[--i] + p - 48;
        p = w / 10;
        s3 = (char)((w % 10) + 48) + s3;
    }

    // jeśli łańcuch s2 ma jeszcze cyfry, to dodajemy do nich
    // przeniesienia i umieszczamy w łańcuchu wynikowym

    while (j)
    {
        w = s2[--j] + p - 48;
        p = w / 10;
        s3 = (char)((w % 10) + 48) + s3;
    }

    // jeśli pozostało przeniesienie, to dołączamy je do cyfr
    // w łańcuchu wynikowym

    if (p) s3 = (char)(p + 48) + s3;

    // jeśli w s3 nie ma cyfr, to wpisujemy tam 0

    if (s3 == "") s3 = "0";

    // wyświetlamy wynik

    cout << s3 << endl;

}