[noi]1.6_10:大整数加法
作者:互联网
noi_1.6_10:大整数加法
题目
总时间限制: 1000ms 内存限制: 65536kB
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
#include<bits/stdc++.h>
using namespace std;
char stra[510],strb[510];
int a[510],b[510],c[510];
int main(){
//一、读入
int i=0,j=0;
while((stra[i]=getchar()) != '\n'){
i++;
}
while((strb[j]=getchar()) != '\n'){
j++;
}
//二、反转:低位放到小下标
for(int m=i-1;m>=0;m--){
a[i-1-m]=stra[m]-'0';
}
for(int n=j-1;n>=0;n--){
b[j-1-n]=strb[n]-'0';
}
//三、计算加法
int len=i>j?i:j,jin=0;
for(int k=0;k<=len-1;k++){
c[k]=a[k]+b[k]+jin;
jin=c[k]/10;
c[k]=c[k]%10;
}
if(jin){
len=len+1;
c[len-1]=1;
}
//四、输出
while(c[len-1] ==0 && len-1 >0 )len--;//去除前导0
for(int m=len-1;m>=0;m--) printf("%d",c[m]);
return 0;
}
去除前导零思想记录
while(c[len-1] ==0 && len-1 >0 )len--;//去除前导0
这种方法做出来,结果为12000,正确的结果是倒序21,所以可以先用while循环去除后面的0,再倒序输出。while只会去除第一个非0数字前的0,一旦出现非0数字,就不会进入while循环。
标签:10,1.6,noi,int,len,--,while,前导,510 来源: https://blog.csdn.net/yanfeng_hyf/article/details/111890253