字符串模拟-大整数加法

版权声明:流浪者 https://blog.csdn.net/gz153016/article/details/86417585

【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555

AC:
#include<bits/stdc++.h>
using namespace std;
int main(){
	string str1,str2;
	int a[222]={0},b[222]={0},c[222]={0},lena,lenb,lenc;
	cin>>str1;
	cin>>str2;
    lena=str1.length();
    lenb=str2.length();
    lenc=lena>lenb?lena:lenb;
    for(int i=0;i<lena;++i)
    a[lena-i]=str1[i]-'0';
	for(int i=0;i<lenb;++i)
	b[lenb-i]=str2[i]-'0';
	int temp=1;
	int x=0;
	while(temp<=lenc){
		c[temp]=(a[temp]+b[temp]+x)%10;
		x=(a[temp]+b[temp]+x)/10;
		temp++;
	}
	int index=temp;
	if(x)c[temp]=x;
	else{
		for(int i=index;i>0;--i){
			if(c[i]){
				index=i;
				break;
			}
		}
	}
	for(int i=index;i>0;--i)
	cout<<c[i];
	return 0;
}


#include<iostream>
#include<cstring>
using namespace std;
int main(){
	string str1,str2;
	int a[222]={0},b[222]={0},c[222]={0};
	cin>>str1;
	cin>>str2;
	int len1=str1.length();
	int len2=str2.length();
	
	
	for(int i=0;i<len1;++i)
	a[len1-i]=str1[i]-'0';
	for(int i=0;i<len2;++i)
	b[len2-i]=str2[i]-'0';
	int lenc=len1>len2?len1:len2;
	int x=0;
	int temp=1;
	while(temp<=lenc){
		c[temp]=(a[temp]+b[temp]+x)%10;
		x=(a[temp]+b[temp]+x)/10;
		temp++;
	}
	int index;
	if(x)c[lenc]=x;
	else{
		for(index=lenc;index>0;index--)
		if(c[index])break;
		lenc=index;
	}
	for(int i=lenc;i>0;i--)
	cout<<c[i];
	cout<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/gz153016/article/details/86417585