BASIC-29基礎練習高精度加算
1772 ワード
問題の説明
2つの整数を入力
a和
b,この2つの整数の和を出力する.
a和
bは100位を超えない.
アルゴリズムの説明
によって
a和
bはいずれも大きいため、言語の標準データ型を直接使用して記憶することはできない.この問題については,一般に配列を用いて処理される.
配列の定義
A,
A[0]記憶用
aのビット、
A[1]記憶用
aの10位は、このように推す.同じ配列で
Bは記憶する
b.
計算#ケイサン#
c =
a +
bの場合、まず
A[0]と
B[0]を加算し、キャリーが発生した場合、キャリー(和の10桁)を格納する
r,和の桁数を格納する
C[0]、すなわち
C[0]は(
A[0]+
B[0])%10.そして計算
A[1]と
B[1]を加算した場合、下位の値を上げる
rも加算すると、すなわち
C[1]は
A[1]、
B[1]と
r 3つの数の和.またキャリーが発生した場合でも、新しいキャリーを
rにおいて、和のビットは
C[1]では.このように推すと,すぐに求めることができる
Cのすべてのビット.
最後に
C出力でOKです.
入力フォーマット
入力には2行が含まれ、最初の動作は非負の整数です.
a,第2の挙動の非負の整数
b.2つの整数はいずれも100ビットを超えず、2つの数の最高位は0ではありません.
出力フォーマット
1行出力、表示
a +
bの値.
サンプル入力
20100122201001221234567890
2010012220100122
サンプル出力
20100122203011233454668012
コード:
2つの整数を入力
a和
b,この2つの整数の和を出力する.
a和
bは100位を超えない.
アルゴリズムの説明
によって
a和
bはいずれも大きいため、言語の標準データ型を直接使用して記憶することはできない.この問題については,一般に配列を用いて処理される.
配列の定義
A,
A[0]記憶用
aのビット、
A[1]記憶用
aの10位は、このように推す.同じ配列で
Bは記憶する
b.
計算#ケイサン#
c =
a +
bの場合、まず
A[0]と
B[0]を加算し、キャリーが発生した場合、キャリー(和の10桁)を格納する
r,和の桁数を格納する
C[0]、すなわち
C[0]は(
A[0]+
B[0])%10.そして計算
A[1]と
B[1]を加算した場合、下位の値を上げる
rも加算すると、すなわち
C[1]は
A[1]、
B[1]と
r 3つの数の和.またキャリーが発生した場合でも、新しいキャリーを
rにおいて、和のビットは
C[1]では.このように推すと,すぐに求めることができる
Cのすべてのビット.
最後に
C出力でOKです.
入力フォーマット
入力には2行が含まれ、最初の動作は非負の整数です.
a,第2の挙動の非負の整数
b.2つの整数はいずれも100ビットを超えず、2つの数の最高位は0ではありません.
出力フォーマット
1行出力、表示
a +
bの値.
サンプル入力
20100122201001221234567890
2010012220100122
サンプル出力
20100122203011233454668012
コード:
#include
#include
char a[105];
char b[105];
char c[105];
int main()
{
scanf("%s%s",a,b);
memset(c,0,sizeof(c)); // 0 memset(c,0,sizeof(c)) memset(c,'0',sizeof(c))
int len1 = strlen(a)-1; //
int len2 = strlen(b)-1;
int i = 0; // 0
while( i <= len1 || i <= len2 ) // i len 。
{
if( i<=len1 )
{
c[i] = c[i] + a[len1-i] -'0'; //len-i i , len ,
}
if( i<=len2 )
{
c[i] = c[i] + b[len2-i] -'0';
}
if(c[i] >= 10)
{
c[i+1] = c[i] / 10;
c[i] = c[i] % 10;
}
i++;
}
if(c[i]<=0) i--;
while(i>=0) printf("%d",c[i--]);
return 0;
}
2つの问题をした后に特に泣きたくて、ちょうど気が狂って何日かJAVAを学んで、C++の知识はすべてとても忘れて、これも惊いて目が覚めて、プログラミングを练习して多く练习します