目录
比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。
1151:题目描述
比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。
输入
输入数据有多组。首先输入一个整数T,表示有T组输入。
每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。
输出
对于每组输入,输出两个整数的和,单独占一行。
答案:
#include<stdio.h>
int main()
{
char a[1002],b[1002];
int i,n,j,k,t;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%s%s",&a,&b);
for(j=0; a[j]!='\0'; j++)//数组a和b 为1-9的数字
a[j]=a[j]-48;
for(k=0; b[k]!='\0'; k++)
b[k]=b[k]-48;
if(j>k)
{
t=j;
for(k; k>0; k--,j--)
{
a[j-1]=a[j-1]+b[k-1];
if(a[j-1]>9)
{
a[j-1]=a[j-1]%10;
a[j-2]=a[j-2]+1;
}
}
//for(j=0; a[j]!='\0'; j++)
for(j=0; j<t; j++)
printf("%d",a[j]);
printf("\n");
}
else
{
t=k;
for(j; j>0; k--,j--)
{
b[k-1]=b[k-1]+a[j-1];
if(b[k-1]>9 && k!=1)//9+9=18,即 b[0]不用进位,可以大于9
{
b[k-1]=b[k-1]%10;
b[k-2]=b[k-2]+1;
}
}
//for(k=0; b[k]!='\0'; k++)
for(k=0; k<t; k++)
printf("%d",b[k]);
printf("\n");
}
}
return 0;
}
问题:
输出按照//的方式会少输出一个,原因未知(理论应该输出完整)
大数加法运算时,控制循环次数的i会失效,答案能算出,但是程序不会结束,程序会无限算读取的两个数的加法
还有一个思路:
#include<stdio.h>
int main()
{
char a[1001],b[1001];
int i,n,j,k,l;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%s%s",&a,&b);
for(j=0; a[j]!='\0'; j++)//数组a和b 为1-9的数字
a[j]=a[j]-48;
for(k=0; b[k]!='\0'; k++)
b[k]=b[k]-48;
if(j>k)
while(!isdigit(b[k-1]+48))
for(l=j-1; l>0; l--)//向后平移一位
b[l]=b[l-1];
for(k=0; b[k]!='\0'; k++)
printf("%d",b[k]);
printf("\n");
if(j<k)
while(!isdigit(a[j-1]+48))
for(l=k-1; l>0; l--)//向后平移一位
a[l]=a[l-1];
}
for(l=0; a[l]!='\0'; l++)
printf("%c\n",a[l]);
for(l=0; b[i]!='\0'; l++)
printf("%c\n",b[l]);
return 0;
}
例如
123 2
转化为
123 002
然后单独相加(从下标2(右向左)(进位问题)开始循环,上下数组相加, 如果 >9 ,剩下%10(数组【0】不用进位))
思路是这样,代码暂时未完成。