Cデータ構造の高精度整数
1879 ワード
数値が非常に巨大な整数に遭遇して、どのデータ型でも彼の値を保存できない場合、構造体を使用してこの整数を保存し、その演算の実現を完了することを考慮します.
1.加算器を実装します.a+bを出力できるようにする値入力は、2つの数aとbを含み、いずれも1000ビットを超えず、a+bの値を出力する
サンプル入力:
2 6
10000000000 1000000000000000
サンプル出力:
8
1000010000000000
構想:高精度整数を保存する構造体を定義する
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