能想到的測試數據都試過了,還是沒找到被哪條數據卡了,有些困了,於是把代碼先留下,回頭哪天發現錯誤後也能給自己警示。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, const char * argv[])
{
int n, maxLen = 0, minLen = 0, flag;
string a, b;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a >> b;
flag = 0;
if (a.length() < b.length()) {
string temp = a; a = b; b = temp;
}
maxLen = (int)(a.length());
minLen = (int)(b.length());
cout << "Case " << i << ":" << endl;
int sum[maxLen+1];//存放結果的數組
int k = minLen-1;
for (int j = maxLen - 1; ; --j) {
if (j < 0) {//紀錄最後是否有進位
sum[0] = flag;
break;
}
if (k < 0) {//短字符串已遍歷完
if (a[j]-'0' + flag > 9) {
sum[j+1] = a[j]-'0' + flag - 10;
flag = 1;
}
else
{
sum[j+1] = a[j]-'0' + flag;
flag = 0;
}
}else if (k >= 0){//兩個字符串一起遍歷
if (a[j]-'0' + b[k]-'0' + flag > 9) {
sum[j+1] = a[j]-'0' + b[k]-'0' + flag - 10;
flag = 1;
}
else
{
sum[j+1] = a[j]-'0' + b[k]-'0' + flag;
flag = 0;
}
}
--k;
}
//輸出部分
int i1;
for (i1 = 0; i1 < a.length()-1; ++i1) {
if (a[i1] != '0') {
break;
}
}
for (int i = i1; i < a.length(); ++i) {
cout << a[i];
}
cout << " + ";
int i2;
for (i2 = 0; i2 < b.length()-1; ++i2) {
if (b[i2] != '0') {
break;
}
}
for (int i = i2; i < b.length(); ++i) {
cout << b[i];
}
cout << " = ";
int k1 = 0;
for (k1 = 0; k1 < maxLen; ++k1) {
if (sum[k1] != 0) {
break;
}
}
for (int i = k1; i <= maxLen; ++i) {
cout << sum[i];
}
if (i < n) {
cout << endl;
}
cout << endl;
}
return 0;
}
希望以後不被這次比較差的命名方式影響。