思路:
改良了之前自己写的一个高精度的模板。。。也不能说是改良吧,应该是改错。。。
这题不会出现 000 + 000000 = 0 这种情况。
然后就是恶心的格式。。。pe了好久。。。
AC代码:
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <string.h>
#define N 10000
using namespace std;
// 大数a,b相加 ,结果放在c上
void BigSum(char* a,char *b,char *c){
char s[N];
int i = strlen(a);
int j = strlen(b);
if(i<j){
int temp = i;
i = j;
j = temp;
char * tt = a;
a = b;
b = tt;
}
int jinwei = 0;
int k;
for(k = 1;k <= i+1;k++){
int m;
if(j >= k)
m = a[i-k] + b[j-k] - 48 * 2 + jinwei;
else if( i >= k)
m = a[i-k] - 48 + jinwei;
else{
m = jinwei;
if(m == 0)break;
}
if(m >= 10){
jinwei = 1;
m-=10;
}
else{
jinwei = 0;
}
char c = m + 48;
s[k-1] = c;
}
k--;
k--;
for(int l = 0;l <= k;l++){
c[l] = s[k-l];
}
c[k+1] = '\0';
}
char mm[5000];
char n1[5000];
char n2[5000];
int main()
{
int cas = 0;
int t;
cin>>t;
while(t--){
cas++;
scanf("%s%s",n1,n2);
BigSum(n1,n2,mm);
printf("Case %d:\n",cas);
printf("%s + %s = ",n1,n2);
for(int i = 0;mm[i];i++){
printf("%c",mm[i]);
}
if(t != 0)
printf("\n\n");
else
printf("\n");
}
return 0;
}