Cデータ構造の高精度整数


数値が非常に巨大な整数に遭遇して、どのデータ型でも彼の値を保存できない場合、構造体を使用してこの整数を保存し、その演算の実現を完了することを考慮します.
1.加算器を実装します.a+bを出力できるようにする値入力は、2つの数aとbを含み、いずれも1000ビットを超えず、a+bの値を出力する
サンプル入力:
2 6
10000000000  1000000000000000 
サンプル出力:
8
1000010000000000 
構想:高精度整数を保存する構造体を定義する
struct bigInteger
{
	int digit[1000]; 
	int size;
}
digit配列は、大きな整数のいくつかのビット数を保存し、ここでは4ビットごとのグループを使用します.sizeはdigit配列の最初のまだ使用されていない配列単位を表す.整数123456789を例にとると、gigit[0]=6789、digit[1]=2345、digit[2]=1、size=3である.加算のアルゴリズムをコードでシミュレートし,低位から高位まで加算し,低位からのキャリーを加算する規則に従って演算する.
#include
#include
struct bigInteger//         
{
	int digit[1000];//             
	int size;
	void init() //         
	{
		for(int i=0;i<1000;i++) digit[i]=0; //     0 
		size=0;
	}
	void set(char str[])//          
	{
		init();//        
		int L=strlen(str);
		for(int i=L-1,j=0,t=0,c=1;i>=0;i--)
		{//                ,j   4          
		//t                ,c        , 1,10,100,1000     
			t+=(str[i]-'0')*c;
			//                 ,        
			j++;//          
			c*=10;//        
			if(j==4 || i==0)
			{//       4   ,          
				digit[size++]=t;//              ,size           
				j=0;//       4    
				t=0;//     0 
				c=1;//    1 
			}
		}
	}
	void output()//         
	{
		for(int i=size-1;i>=0;i--)
		{
			if (i!=size-1) printf("%04d",digit[i]);
			//                 0;      4  0  ,   110001      
			else printf("%d",digit[i]);
		}
		printf("
"); } bigInteger operator +(const bigInteger &A) const// { bigInteger ret;// , ret.init(); int carry=0;// , 0 for(int i=0;i