#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char s[400];
char t[400];
int m,n,max,d;
int a[400],b[400],c[400];
scanf("%s", s);
scanf("%s", t);
m = strlen(s);//计算长度
n = strlen(t);
if(m>=n) //判断两个数的长度,比如2222和33,则33前要填两个0,并且要有考虑前导0,02222,00033,为什么要有前导0,因为进制转换要多一位
{for(int i=0;i<m;i++)
{
a[0]=0;
a[i+1] = s[i]-'0';} //把字符转为数字
for(int i=0;i<n;i++)
{
for(int i=0;i<=m-n;i++)
b[i]=0;
b[m-n+i+1] = t[i]-'0';}}
if(m<n)
{for(int i=0;i<n;i++)
{
b[0]=0;
b[i+1] = t[i]-'0';}
for(int i=0;i<m;i++)
{
for(int i=0;i<=n-m;i++)
a[i]=0;
a[n-m+i+1] = s[i]-'0';}}
//
if(m>n)
for(int i=0;i<m+1;i++)
c[i] = a[i] + b[i];
if(m<=n)
for(int i=0;i<n+1;i++)
c[i] = a[i] + b[i];
if (m > n)
max = m;
else
max = n;
if(m==n)
max=n;
for(int i=0;i<max+1;i++)
for(int i=max;i>0;i--)
//考虑进制,所以从后到前加,要考虑加法,所以每两个数相加后,如果大于9,则在下次十位加一,十位类似
{
if(c[i]>9)
{
c[i-1]+=1;
c[i]%=10;
}}
d=max;
for(int i=0;i<max+1;i++)
{ if(c[i]!=0)
{d=i;
break;}}
// if(c[i]==)
for(;d<max+1;d++)
printf("%d", c[d]);
// printf("\n");
return 0;
}
大整数加法
最新推荐文章于 2020-05-07 15:50:58 发布