问题 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;
}