描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
#include<stdio.h>
#include<string.h>
void change(int arr[],int n)
{
for(int i=0;i<n/2;i++)
{
int temp=arr[i];
arr[i]=arr[n-1-i];
arr[n-1-i]=temp;
}
} //将数组逆序,方便计算
void Read(int a[])
{
char ch;
int len=0;
while((ch=getchar())!='\n')
{
a[len++]=ch-'0';
}
change(a,len);
} //以字符串的形式录入后转换,方便计算,防止数据溢出
void ni(int arr[],int n)
{
int flag=1;
for(int i=n-1;i>=0;i--)
{
if(flag&&arr[i]!=0)
{
flag=0;
}
if(!flag)
{
printf("%d",arr[i]);
}
}
if(flag)
{
printf("0");
}
} //逆序打印,flag用于检测0,由于数据逆序,先要把0筛掉
void add(int a[],int b[])
{
for(int i=0;i<201;i++)
{
a[i]=b[i]+a[i];
a[i+1]+=a[i]/10;
a[i]=a[i]%10;
}
ni(a,201);
} //相加函数
int main()
{
int a[201];
int b[201];
for(int i=0;i<201;i++)
{
a[i]=0;
b[i]=0;
}
Read(a);
Read(b);
add(a,b);
return 0;
}