【问题描述】
输入两个十进制正整数 M 和 N,求它们的和,结果用十进制表示。注意,M 和 N 可能非常大。 【输入描述】
第一行包含一个正整数 M(1≤M<10100); 第二行包含一个正整数 N(1≤N<10100)。
【输出描述】
输出一个正整数,表示计算结果。
【输入样例】
769584695655486596597654685486745
452537865655768856564568658
【输出样例】
769585148193352252366511250055403
【解析】
本题关键点:以字符串输 入,按照列竖式方式求解,可使用函数reverse反转字符串,并转换成整数进行相加。需要注意进位情况的处理。代码如下。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int calculate(string x,string y){
int ans,len;
int result[y.length()+1];
result[0]=0;
for(int i=0;i<x.length();i++){
x[i]=x[i]-'0';
y[i]=y[i]-'0';
if(result[i]==1){
ans = x[i]+y[i]+result[i];
}else{
ans = x[i]+y[i];
}
if(ans>=10){
result[i]=ans%10;
result[i+1]=1;
}else{
result[i]= ans;
result[i+1] = 0;
}
}
y[x.length()]=y[x.length()]-'0';
result[x.length()] += y[x.length()];
for(int j=x.length()+1;j<y.length();j++){
y[j]=y[j]-'0';
result[j] = y[j];
}
len = sizeof(result)/sizeof(result[0]);
for(int k=len-2;k>=0;k--){
cout<<result[k];
}
}
int main(){
string m,n;
int mlen,nlen;
cin>>m>>n;
//反转字符串
reverse(m.begin(),m.end());
reverse(n.begin(),n.end());
mlen = m.length();
nlen = n.length();
if(mlen>nlen){
calculate(n,m);
}else{
calculate(m,n);
}
cout<<endl;
return 0;
}