其他分享
首页 > 其他分享> > [noi]1.6_10:大整数加法

[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