所有的情况行云流水,还考虑到了两个数的位数不同的情况,供大家参考。
#include<cstdio> #include<stack> #include<vector> #include<string> using namespace std; int main() { char arr1[10]; char arr2[10]; while (scanf("%s %s", arr1, arr2) != EOF) { string s1 = arr1; string s2 = arr2; if (s1 == "0" && s1 == "0") { break; } int len1 = s1.size(); int len2 = s2.size(); stack<int> sta1; stack<int> sta2; for (int i = 0 ; i < len1 ; ++i ) { sta1.push(s1[i] - '0'); } for (int i = 0 ; i < len2 ; ++i ) { sta2.push(s2[i] - '0'); } vector<int> vec1; vector<int> vec2; for (int i = 0 ; i < len1 ; ++i) { vec1.push_back(sta1.top()); sta1.pop(); } for (int i = 0 ; i < len2 ; ++i) { vec2.push_back(sta2.top()); sta2.pop(); } int count = 0 ; int carry =0; for (int i = 0 ; i < len1 && i < len2; ++i) { if (vec1[i] + vec2[i] + carry>= 10) { ++count; carry =1; } else { carry = 0; } } if (count == 0) { printf("NO carry operation.\n"); } else if (count == 1) { printf("%d carry operation.\n", count); } else { printf("%d carry operations.\n", count); } } return 0; }