BASIC-29基礎練習高精度加算


問題の説明
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++の知识はすべてとても忘れて、これも惊いて目が覚めて、プログラミングを练习して多く练习します