大数加法(C++实现)

问题 1513: [蓝桥杯][算法提高VIP]大数加法

题目描述

输入两个正整数a,b,输出a+b的值。 

输入

两行,第一行a,第二行b。a和b的长度均小于1000位。

输出

一行,a+b的值。 

样例输入

4 
2 

样例输出

6
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

int a[1010],b[1010],c[1010];
int len;
string ax,by;

void add(int x , int y){
//	d[1010] = {0};
	for( int i =1 ;i <=len ;++i){
		c[i] = a[i] + b[i] + c[i];
		c[i+1] = c[i]/10;
		c[i] %= 10; 
	}
	if(c[len+1] ) len++;
}

int main()
{
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	cin>>ax>>by;
	for(int i = ax.length(),j =0;j < ax.size(),i > 0;i--,j++){
		a[i] = ax[j] - '0';//将ax字符串逆序输入数组a中 ,且起始角标为1
	}
	for(int i = by.length(),j =0;j < by.size(),i > 0;i--,j++){
		b[i] = by[j] - '0';//将by字符串逆序输入数组b中 ,且起始角标为1
	}	
	 len = max(ax.size(),by.size());
	add(ax.size(),by.size());
	for( int i=len ;i >0 ;--i){
		printf("%d",c[i]);
	}
	return 0;
 } 

贴一个 二刷的时候下的写的一个很小但是很致命的错误  

代码“int len = max(s1.length(),s2.length());add(len);” 传递参数的时候是形参 例如 5+6的时候 输出为1 因为len是形参 len经过add函数后还是1,结果就是‘答案错误9%’

#include<bits/stdc++.h>
using namespace std;
#define M 1010
int a[M],b[M],c[M];
string s1,s2;
void add(int len){
memset(c,0,sizeof(c));
for(int i = 1;i <= len ;++i){
c[i] = a[i] + b[i] + c[i];
c[i+1] = c[i] / 10;
c[i] %= 10;
}
if(c[len + 1]) len++;
}
int main(){
cin>>s1>>s2;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i = 0,j = s1.length() ;i < s1.length(),j > 0;++i,j--)
a[j] = s1[i] - '0';
for(int i = 0,j = s2.length() ;i < s2.length(),j > 0;++i,j--)
b[j] = s2[i] - '0';
int len = max(s1.length(),s2.length());
add(len);
for(int i = len;i > 0;i--)
cout<<c[i];
return 0;
} 

猜你喜欢

转载自blog.csdn.net/intmain_S/article/details/90293977
今日推荐