水题,变种斐波那契数列大数相加,注意全0的情况。 #include <iostream> #include <cstdio> #include <cstring> #define size 100 using namespace std; void add(char *a, char *b, char *c, char *d) { int ta[size] = {0}; int tb[size] = {0}; int tc[size] = {0}; int ans[size] = {0}; int lena = strlen(a), lenb = strlen(b), lenc = strlen(c); for (int i = 0; i <= lena-1; ++i) ta[i] = a[lena-1-i] - '0'; for (int i = 0; i <= lenb-1; ++i) tb[i] = b[lenb-1-i] - '0'; for (int i = 0; i <= lenc-1; ++i) tc[i] = c[lenc-1-i] - '0'; int len = lena > lenb ? lena : lenb; len = len > lenc ? len : lenc; int carry = 0; for (int i = 0; i <= len; ++i) { // =0是为了留给高位进位 ans[i] += ta[i] + tb[i] + tc[i] + carry; carry = ans[i] / 10; ans[i] = ans[i] % 10; } // 找非0 int i; for (i = len; i >= 0; --i) if (ans[i] != 0) break; if (i == -1) { // 全0 d[0] = '0'; d[1] = '\0'; } else { int j; for (j = 0; i >= 0; --i, ++j) { d[j] = ans[i] + '0'; } d[j] = '\0'; } } int main() { //freopen("temp.txt", "r", stdin); char a[size], b[size], c[size], ans[size]; while (cin >> a >> b >> c) { for (int i = 1; i <= 25; ++i) { // 到第25次时,ans为A99 add(a, b, c, ans); add(b, c, ans, a); add(c, ans, a, b); add(ans, a, b, c); } cout << ans << endl; } return 0; }