高精度乘法,是指計算超過標準資料型別能夠表達的計算範圍的乘法計算。
如果計算機結果已經超過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...