您的位置:首页 > 其它

大数加法

2017-02-22 14:44 302 查看

题目描述

 求两个不超过200位的非负整数的和。

输入

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

输出

一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入

88888888888888888888
33333333333333333333

样例输出

122222222222222222221

思路:大数字用64位处理是肯定不可以的,应用字符数组,对每一位相加,>10的进一位。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char str1[1005],str2[1005];
int str[1005];
int main()
{
scanf("%s",str1);
scanf("%s",str2);
int num1=strlen(str1);
int num2=strlen(str2);
int i,j,ipos=0,k,mid=0;
for(i=num1-1,j=num2-1;i>=0&&j>=0;i--,j--)
{
mid+=str1[i]-'0'+str2[j]-'0';
if(mid>=10)
{
str[ipos]=mid-10;
mid=1;
}

else{
str[ipos]=mid;
mid=0;
}
ipos++;
}
if(j>=0)
while(j>=0)
{
mid+=str2[j]-'0';
if(mid>=10)
{
str[ipos]=mid-10;
mid=1;
}

else{
str[ipos]=mid;
mid=0;
}
j--;
ipos++;
}
if(i>=0)
while(i>=0)
{
mid+=str1[i]-'0';
if(mid>=10)
{
str[ipos]=mid-10;
mid=1;
}

else{
str[ipos]=mid;
mid=0;
}
i--;
ipos++;
}
if(j<0&&i<0&&mid==1)
str[ipos++]=1;

int flag=0;
for(k=ipos-1;k>=0;k--)
{   if(str[k]==0&&flag==0)
continue;
else
{
printf("%d",str[k]);
flag=1;
}
}
printf("\n");

return 0;
}


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