高精度演算法

2021-10-10 01:31:40 字數 1920 閱讀 5243

實質

高精度演算法的實質就是模擬小學豎式

分類

按運算分類有

高精加高精,高精減高精

高精乘低精,高精除低精

按儲存型別分類有

字串(每一位只存乙個數,輸入輸出方便)

陣列(每一位可存多位數,輸入輸出麻煩)

總結

根據時間複雜度而言,通常高精乘低精用陣列,其他都用字串

如何將高精數轉化

void

init()

void

change()

}if(t!=

1)b[

++b[0]

]=sum;

}

如何輸出

因為陣列下標低的點存的是高位的值,故要從下標低的開始輸出,且第一位要按原位輸出,除第一位以外的其他數不足8位的要保留前導0

printf

("%d"

,a[a[0]

]);for

(int i=a[0]

-1;i>=

1;i--

)printf

("%.8d"

,a[i]);

cout<

ps:低精數也可以看成高精數

void

jia(

)while

(jw)

}

如何實現高精乘低精

void

chen()

while

(jw)

}

如何實現高精減高精

高精度轉化

除高精除低精以外,其他操作均是從低位到高位

故運算前需要進行轉化

void

run(

)while

(jw)

高精乘低精

cin>>x;

int sum,jw=0;

for(

int i=

0; i)while

(jw)

高精除低精

高精除低精不需要進行前後交換,從高位開始一位一位除即可

【注意】

要除去前導0,且若答案為0的話要補個0

cin>>x;

init()

;int len=

strlen

(a),sum=

0,lenb=0;

for(

int i=

0; i)a[i]-=

'0';

for(

int i=

0; i)else b[lenb++

]=sum/x;

sum%

=x;}

if(lenb==0)

strcpy

(a,b)

; a[lenb]

='\0'

;for

(int i=

0; i)a[i]+=

'0';

演算法 高精度乘法2(高精度乘高精度)

題目描述 高精度乘,求兩個很大的非負整數相乘的結果。輸入 2個非負整數,每個一行,每個整數不超過240位。輸出 乙個整數,表示相乘的結果。例子 為了和演算法對應方便,用上面數乘下面數的方法12 5 2512 5502 5312 5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0 1234 56...

高精度演算法 791 高精度加法

給定兩個正整數,計算它們的和。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整數長度 100000 輸入樣例 1223 輸出樣例 35注意點 1.兩個整數較大,用字串來存,這樣的話,可以呼叫它的size 方法 2.將兩個大的整數,存入vector陣列中,最好把整數...

高精度演算法

任務 高精度,計算大數乘小數 引數 乘法函式mul引數為 被乘數a,儲存最終結果的ans陣列,乘數b 結果 ans陣列中ans 0 為最高位,以此類推 include include using namespace std void mul char a,char ans,int b 任務 高精度,...