水题 HDU-1002 A + B Problem II
题目链接:杭电1002
题目大意:…long long 溢出的a+b
解题思路:输入进字符串然后转到int数组计算 (最开始用的三个字符串麻烦死了) 注意高位是否会进位 注意输出的换行 提交两次格式错误坑死了
代码块:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int main() {
int num1[1005] = { 0 }, num2[1005] = { 0 }, sum[1005] = { 0 };
char str1[1005] = { '\0' }, str2[1005] = { '\0' };
int t;
cin >> t;
for (int k = 1; k <= t; k++) {
cin >> str1 >> str2;
int len1 = strlen(str1);
int len2 = strlen(str2);
int maxx = max(len1, len2);
int minn = min(len1, len2);
//大数反向保留进arr
for (int i = 0; i < len1; i++) {
num1[i] = str1[len1 - 1 - i] - '0';
}
for (int i = 0; i < len2; i++) {
num2[i] = str2[len2 - 1 - i] - '0';
}
for (int i = 0; i < maxx; i++) {
sum[i] = num1[i] + num2[i] + sum[i];
if (sum[i] >= 10) {
sum[i + 1] = 1;
sum[i] = sum[i] % 10;
}
}
printf("Case %d:\n", k);
printf("%s + %s = ",str1,str2);
if (sum[maxx] == 1) {
cout << "1";
}//最后一位是否有进位
for (int i = maxx - 1; i >= 0; i--) {
cout << sum[i];
}
//最后一个样例后面就一个换行
if (k != t) {
cout << endl << endl;
}
else {
cout << endl;
}
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
memset(sum, 0, sizeof(sum));
memset(str1, 0, sizeof(str1));
memset(str2, 0, sizeof(str2));
}
return 0;
}