时间限制:1s 空间限制:128000KB题目等级:黄金 Gold
题目描述
给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
输入描述
读入两个用空格隔开的正整数
输出描述
输出A+B的值
样例输入
3 12
样例输出
15
解题思路
类比减法,见上一篇博客
AC代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char a[505],b[505];
scanf("%s%s",a,b);
int la=strlen(a),lb=strlen(b);
if( la==lb ){
for( int i=la-1 ; i>=1 ; --i ){
if( ( a[i]-'0' )+( b[i]-'0' )<=9 ){
a[i] += b[i]-'0';
}
else{
a[i] += b[i]-'0'-10;
++a[i-1];
}
}
if( ( a[0]-'0' )+( b[0]-'0' )>=10 ){
a[0] += b[0]-'0'-10;
a[504] = '1'; //第0位产生的进位暂存到最后一位
}
}
else{
if( la<lb ){//保证a是两数中位数高的串
char c[505];
strcpy(c,a); strcpy(a,b); strcpy(b,c);//交换字符串a,b
int t=la; la=lb; lb=t;//la,lb做相应交换
}
int i,j;
for( i=la-1,j=lb-1 ; j>=0 ; --i,--j ){
if( ( a[i]-'0' )+( b[j]-'0' )<=9 ){
a[i] += b[j]-'0';
}
else{
a[i] += b[j]-'0'-10;
++a[i-1];
}
}
//问题解决:a的剩余位超9
for( int k=i;k>=1;--k ){
if( a[k]>'9' ){
a[k] -= 10;
++a[k-1];
}
}
if( a[0]>'9' ){
a[0] -= 10;
a[504] = '1';
}
}
if( a[504]>='1' && a[504]<='9' ){
printf("%c",a[504]);
}
printf("%s\n",a);
return 0;
}