问题描述:
冬天越来越冷了,Choice当然不想让大家更凉了,所以她给出两个整数A,B,你只要计算A+B的和就好。
输入:
输入数据有多组。
每组一行输入两个整数A,B
A和B的长度小于1000(A,B都是非负数)
输出:
输出A+B的结果
样例输入:
1 1 1 2
样例输出:
2 3
原因分析:
高进度算法:
1.首先创两个int数组,以及两个字符串(或者两个char类型数组),int数组初始化,拿数组第一个单元记录 数据长度,并将字符串或者char数组里的数字 单个 存入int数组里(倒着存入)
2.找出 两个数中最大长度,然后+1(只可能加1位,因为进位最多进一位)
两个数组相加,将 i 单元上的数字分别存进 i 和 i+1 单元里( a[i+1] + =a[i]/10;)
3.剔除前导0,因为之前都是倒着来的,所以要从 len 开始 逐渐减 1
解决方案:
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
int main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);string str1,str2;while(cin>>str1>>str2){int a[2000],b[2000],i,j,len;memset(a,0,sizeof(a));memset(b,0,sizeof(b));a[0]=str1.length();b[0]=str2.length();for(i=1;i<=a[0];i++)a[i]=str1[a[0]-i]-'0';for(i=1;i<=b[0];i++)b[i]=str2[b[0]-i]-'0';len=max(a[0],b[0])+1;for(i=1;i<=len;i++){a[i]+=b[i];a[i+1]+=a[i]/10;a[i]%=10;}while(len>1&&a[len]==0)len--;for(i=len;i>=1;i--)cout<<a[i];cout<<endl;}return 0;
}