您的位置:首页 > 其它

hdoj 1002 sum problem(超大数相加)

2017-11-30 18:19 267 查看
思路:因为是超大数,所以要用字符数组进行存储,并且在数组的基础上进行计算

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
char a[1010];
char b[1010];
int  num1[1000];
int  num2[1000];
int  sum[1001];
int  num1_len;
int  num2_len;
int t;
int t1;
int i;
int x;
int y;

scanf("%d",&t);
for(t1=1;t1<=t;t1++)							//数组初始化,避免影响下一次循环
{
memset(num1,0,sizeof(int)*1001);
memset(num2,0,sizeof(int)*1
4000
001);
memset(sum,0,sizeof(int)*1001);
for(i=0;i<1010;i++)
{
a[i]='\0';
b[i]='\0';

}
x=0;
scanf("%s %s",a,b);

num1_len=strlen(a);
num2_len=strlen(b);
for(i=num1_len-1;i>=0;i--)					//反序存储
{
num1[i]=(int)a[x]-(int)'0';
x++;
}
x=0;
for(i=num2_len-1;i>=0;i--)					//反序存储
{
num2[i]=(int)b[x]-(int)'0';
x++;
}

if(num1_len>=num2_len)						//小学加法进位
{

for(i=0;i<num1_len;i++)
{
if(num1[i]+num2[i]>9)
{
sum[i]+=num1[i]+num2[i]-10;
sum[i+1]++;
}
else
{
sum[i]+=num1[i]+num2[i];
}
}
}
else
{
for(i=0;i<num2_len;i++)
{
if(num1[i]+num2[i]>9)
{
sum[i]+=num1[i]+num2[i]-10;
sum[i+1]++;
}
else
{
sum[i]+=num1[i]+num2[i];
}
}
}

printf("Case %d:\n",t1);
printf("%s + %s = ",a,b);
for(i=1000;i>=0;i--)						//判断sum数组从哪一位开始最后的结果的第一个数
{
if(sum[1000]==1)
{
y=1000;
break;
}

if(sum[i]==0 && sum[i-1]!=0)
{
y=i-1;
break;
}
}
for(i=y;i>=0;i--)								//输出最后的结果
{
printf("%d",sum[i]);
}
printf("\n");
if(t1!=t)
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: