题目
输入两个正整数a,b,输出a+b的值。
输入
两行,第一行a,第二行b。a和b的长度均小于1000位。
输出
一行,a+b的值。
样例输入
4
2
样例输出
6
解题思路
为了便于进位,将数据读入后个位数放在字符串数组下标为0的位置,并在数组末尾(高位前面)将两个字符串通过补零,变为为位数相等的“数”,之后,逐位相加并逆向输出即可。
代码
#include<stdio.h>
#include<string.h>
void zero_padding(char a[], int len1, int len2){
int i;
for (i=len1;i<len2;i++)
a[i] = '0';
}
void print(char a[],int len){
int i;
for (i=len-1;i>=0;i--)
printf("%c",a[i]);
}
int main()
{
int i,j,jw=0,temp;
char a[1001],b[1001],c[1001],d[1001],sum[1010];//a和b的长度均小于1000位
scanf("%s\n%s",a,b);
int len,lena = strlen(a);
int lenb = strlen(b);
for (i=lena-1;i>=0;i--)//反转
c[lena-1-i] = a[i];
for (i=lenb-1;i>=0;i--)
d[lenb-1-i] = b[i];
if (lena<lenb)//补零
zero_padding(c,lena,lenb);
else if (lenb<lena)
zero_padding(d,lenb,lena);
len = (lena>lenb) ? lena:lenb;
for (i=0;i<len;i++)//相加
{
temp = c[i]+d[i]+jw-2*48;
sum[i] = temp%10+48;
jw = temp/10;
}
if (jw!=0)//补位
sum[len++] = jw+48;
print(sum,len);//输出
return 0;
}