大数加算(C++実装)
1893 ワード
問題1513:[ブルーブリッジカップ][アルゴリズム向上VIP]大数加算
タイトルの説明
2つの正の整数a,bを入力し、a+bの値を出力します.
入力
2行、第1行a、第2行b.aおよびbの長さはいずれも1000ビット未満である.
しゅつりょく
1行、a+bの値.
サンプル入力
サンプル出力
二重ブラシを貼ったときに書いた小さな致命的な間違いです
コード「int len=max(s 1.length()、s 2.length();add(len);」パラメータを渡すときにパラメータ例えば5+6のときに出力は1です.lenはパラメータlenがadd関数を通過した後なのか1なのか、結果は「答えが9%間違っている」からです.
タイトルの説明
2つの正の整数a,bを入力し、a+bの値を出力します.
入力
2行、第1行a、第2行b.aおよびbの長さはいずれも1000ビット未満である.
しゅつりょく
1行、a+bの値.
サンプル入力
4
2
サンプル出力
6
#include
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(s 1.length()、s 2.length();add(len);」パラメータを渡すときにパラメータ例えば5+6のときに出力は1です.lenはパラメータlenがadd関数を通過した後なのか1なのか、結果は「答えが9%間違っている」からです.
#include
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<