高精度乘法 劉汝佳BigNumber高精度結構體

2021-10-01 03:20:38 字數 1753 閱讀 3960

高精度乘法,是指計算超過標準資料型別能夠表達的計算範圍的乘法計算。

如果計算機結果已經超過long long所能表示的範圍,將會得到溢位後的答案(結果不正確,也不能計算)

這時候就需要用到高精度乘法演算法,所謂高精度乘法演算法,就是通過錄入字元陣列的形式儲存數字為字串,然後逐一取出錄入的數字字元,轉換成對應的int數字進行計算,然後利用計算機善於重複迴圈處理資料的特點,模擬乘法豎式的計算過程,通過進製和錯位相加的形式,得到高精度計算結果。

#include

#include

intmain()

;int k=

0,carry=

0,x=

1,i;

char a[

100000

],b[

100000];

gets

(a);

gets

(b);

int a_length=

strlen

(a),b_length=

strlen

(b);

//乘法豎式的方法?

for( i=a_length-

1;i>=

0;i--

) c[k]

+=carry;

//可能最高位有進製

carry=0;

//被乘數的第k+1個數開始,carry清0

k=x;

//————錯位相加

x++;}

for( i=

10000-1

;i>

0;i--)if

(c[i]

)break

;//去掉前導0

for(

int j=i;j>=

0;j--

)printf

("%d"

,c[j]);

//逆序輸出

return0;

}

最後是劉汝佳高精度結構體

#include

#include

#include

#include

using

namespace std;

struct biginteger

// 建構函式

biginteger operator=(

long

long num)

while

(num >0)

;return

*this;}

biginteger operator=(

const string& str)

return

*this;}

biginteger operator+(

const biginteger& b)

const

return c;}}

;ostream&

operator

<<

(ostream &out,

const biginteger& x)

return out;

}istream&

operator

>>

(istream &in, biginteger& x)

#include

#include

set s;

mapint> m;

intmain()

劉汝佳 開燈問題

問題描述 有n盞燈,編號為1 n,第1個人把所有燈開啟,第2個人按下所有編號為2 的倍數的開關 這些燈將被關掉 第3 個人按下所有編號為3的倍數的開關 其中關掉的燈將被開啟,開著的燈將被關閉 依此類推。一共有k個人,問最後有哪些燈開著?輸入 n和k,輸出開著的燈編號。k n 1000 輸入 輸入一組...

ACM ICPC比賽隨想 劉汝佳

劉汝佳,1982年12月生,畢業於重慶外國語學校,清華大學電腦科學與技術系2005級研 究生。高二時創立 資訊學初學者之家 oibh 高三入選ioi2001國家集訓隊。大學一年級時獲a c m icpc世界總決賽銀牌 世界第四 ioi2002 03 04國家集訓隊指導 老師。曾與黃亮合作出版了 演算...

硬幣問題(劉汝佳266,)

題目描述 硬幣找零問題描述 現存在一堆面值為 v1 v2 v3 個單位的硬幣 問最多和最少需要多少個硬幣才能找出總值為t個單位的零錢?輸入 第一行為n,t,表示硬幣個數,需要湊的面額,第二行有n個數,表示硬幣的面額 輸出 一行,分別為最大最小的數目,用空格分開 示例 輸入 5 63 1 2 5 21...