测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A50514. 大整数加法

填空题 困难

题目描述

大整数加法

题目描述

求两个不超过200为的非负整数的和

输入数据

输入有两行,每行是一个不超过200位的非负整数,没有多于的前导0.

输出要求

输出只一行,即相加后的结果。结果里不能有多于的前导0,即如果结果是342,那么就不能输出0342.

输入样例

2222222222222222222222222

3333333333333333333333333

输出样例

5555555555555555555555555

参考答案

#include<iostream> #include<cstring> using namespace std; int main() { //定义变量 char x1[200]={'\0'};//两个不超过200位的加数 char x2[200]={'\0'}; int carry[201]={0};//进位 int result[201]={0};//和 int i;//循环变量 //输入 cin>>x1>>x2; //求两char数组长度 int len1=strlen(x1); int len2=strlen(x2); //反序 strrev(x1); strrev(x2); //确定两序列长度的最大值 int lenmax=len1*(len1>=len2)+len2*(len1<len2); //把char类型的加数数组转化为int int x11[200]={0}; for(i=0;i<=len1-1;i++) { x11[i]=x1[i]-'0'; } int x22[200]={0}; for(i=0;i<=len2-1;i++) { x22[i]=x2[i]-'0'; } //不考虑进位对应位相加 for(i=0;i<=lenmax-1;i++) { result[i]=x11[i]+x22[i]; result[i+1]=0;//用于防止超过lenmax后的一位 } //考虑进位 完成最终求和 for(i=0;i<=lenmax+1;i++) { carry[i+1]=result[i]/10; result[i]=result[i]%10+carry[i]; } //若最高位为0,则不输出最高位 if(result[lenmax]==0) i=lenmax-1; else i=lenmax; for(;i>=0;i--) cout<<result[i]; cout<<endl; return 0; }

答案解析

解题思路:int类型数据最多10位,double类型数据最多64位,因此,不能直接利用int或double类型数据相加求解。应考虑用数组(为方便读入数据,采用字符数组),采用列竖式的思路,对位相加,在考虑进位,最终求解。

上一题 下一题