好久没写代码了
这题很简单不过确实手生写了蛮久的。。。
感觉光写一个大整数太简单了,于是加了一点速,速度应该是普通的四倍左右,这个想法也可以用在其他大整数运算上。
思路就是一次处理更多数字,从1位变成了4位,速度自然也上去了。
最后格式要稍微注意一下,PE了一次,然后就过了。。。
//http://acm.hdu.edu.cn/showproblem.php?pid=1002
#include
#include
#include
#include
#pragma warning(disable:4996)
using namespace std;
int main()
{
int T;
scanf("%d", &T);
for (int i = 1; i <= T; i++)
{
char str1[1010], str2[1010];
int a[255] = { 0 };
int b[255] = { 0 };
int c[255] = { 0 };
printf("Case %d:\n", i);
scanf("%s%s", str1, str2);
int len1 = strlen(str1);
int len2 = strlen(str2);
printf("%s + %s = ", str1, str2);
int j = len1 - 1;
int k = len2 - 1;
for (int jj = j; jj >= 0; jj--)
a[(j - jj) / 4] += (int)pow(10, (j - jj) % 4)*(str1[jj] - '0');
for (int kk = k; kk >= 0; kk--)
b[(k - kk) / 4] += (int)pow(10, (k - kk) % 4)*(str2[kk] - '0');
for (int ii = 0; ii<(j/4>k/4?j/4+1:k/4+1); ii++){
c[ii + 1] = (c[ii]+a[ii] + b[ii]) / 10000;
c[ii] = (c[ii]+a[ii] + b[ii]) % 10000;
}
int flag = 0;
for (int ii = 254; ii >= 0; ii--)
{
if (flag == 0)
if (c[ii] == 0) continue;
else {
printf("%d",c[ii]); flag = 1; continue;
}
printf("%04d", c[ii]);
}
if (i == T- 1)
printf("\n");
else
printf("\n\n");
}
return 0;
}