题目

计算两个非负整数 <math> <semantics> <mrow> <mi> A </mi> <mo separator="true"> , </mo> <mi> B </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> A,B </annotation> </semantics> </math>A,B 的和。
不过这一次有些特殊, <math> <semantics> <mrow> <mi> A </mi> <mo separator="true"> , </mo> <mi> B </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> A,B </annotation> </semantics> </math>A,B 可能会很大。

输入格式

第一行输入一个非负整数 <math> <semantics> <mrow> <mi> A </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> A </annotation> </semantics> </math>A
第二行输入一个非负整数 <math> <semantics> <mrow> <mi> B </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> B </annotation> </semantics> </math>B
<math> <semantics> <mrow> <mi> A </mi> <mo separator="true"> , </mo> <mi> B </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> A,B </annotation> </semantics> </math>A,B 的长度不大于 <math> <semantics> <mrow> <mn> 500 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 500 </annotation> </semantics> </math>500

输出格式

输出 <math> <semantics> <mrow> <mi> A </mi> <mo> + </mo> <mi> B </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> A+B </annotation> </semantics> </math>A+B 的值。
不要有多余的前导零。

样例输入

123

1234

样例输出

1357

题解

字符串计算加减乘都是一个套路,转置计算,结果再转置回来

string 放结果
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
	string A,B;
	string ans;
	cin>>A>>B;
	reverse(A.begin(),A.end());
	reverse(B.begin(),B.end());
	int jw = 0; // 进位
	int len = min(A.length(),B.length()); 
	for(int i=0;i<len;i++){
		ans += (A[i]-'0'+B[i]-'0'+jw)%10+'0';
		if(A[i]-'0'+B[i]-'0'+jw >= 10)
			jw = 1;
		else
			jw = 0;
	}
    if(len < A.length()){
    	for(int i=len;i<A.length();i++){
    		ans += (A[i]-'0'+jw)%10+'0';
			if(A[i]-'0'+jw >= 10)
				jw = 1;
			else
				jw = 0;
    	}	
    }else if(len < B.length()){
    	for(int i=len;i<B.length();i++){
    		ans += (B[i]-'0'+jw)%10+'0';
			if(B[i]-'0'+jw >= 10)
				jw = 1;
			else
				jw = 0;
    	}	
    }
	reverse(ans.begin(),ans.end());
	cout<<ans;
	return 0;
}
char 放结果
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
	string A,B;
	char ans[500+5];
	cin>>A>>B;
	reverse(A.begin(),A.end());
	reverse(B.begin(),B.end());
	int jw = 0; // 进位
	int len = max(A.length(),B.length()); 
	for(int i=0;i<len;i++){
		ans[i] = jw;
		if(i < A.length())
			ans[i] += A[i]-'0';
		if(i < B.length())
			ans[i] += B[i]-'0';
		if(ans[i] >= 10)
			jw = 1;
		else
			jw = 0;
		ans[i] = ans[i]%10+'0';
	}
	reverse(ans,ans+len);
	ans[len] = '\0';
	cout<<ans;
	return 0;
}

返回目录,查看更多