能想到的测试数据都试过了,还是没找到被哪条数据卡了,有些困了,于是把代码先留下,回头哪天发现错误后也能给自己警示。
#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;
}
希望以后不被这次比较差的命名方式影响。