题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222 33333333333333333333
【输出样例】
55555555555555555555
#include <bits/stdc++.h> using namespace std; /*解题思路:int类型数据最多10位,double类型数据最多64位,因此,不能直接利用int或double类型数据相加求解*/ /*应考虑用数组(为方便读入数据,采用字符数组),采用列竖式的思路,对位相加,在考虑进位,最终求解。*/ string A,B; int a[210],b[210],c[210]; int main(){ //A,B 存储字符串 memset(a,0,sizeof(c)); memset(b,0,sizeof(c)); memset(c,0,sizeof(c)); cin>>A>>B; //字符串长度 int lena=A.length(); int lenb=B.length(); //倒过来存储 for(int i=1;i<=lena;i++){ a[i]=A[lena-i]-'0'; } for(int i=1;i<=lenb;i++){ b[i]=B[lenb-i]-'0'; } int len=max(lena,lenb); int i; for(i=1;i<=len;i++){ int tmp=a[i]+b[i]+c[i]; //a[i]+b[i]加上存储的上次加法产生的进位 c[i+1]=tmp/10; //除以10取整作为进位 c[i]=tmp%10; //除以10取余作为这位的结果 } //看最后一位是否有进位,若有进位,则总长度+1 if(c[i]!=0){ len++; } //去除前导0的情况 while(c[len]==0&&len>0){ len--; } //倒着输出结果 for(int i=len;i>=1;i--){ cout<<c[i]; } }
有话要说...