思路:
從下面第乙個數字開始遍歷,逐步乘以上面的每乙個數字,每乘一次就加到add陣列中,最重要的是每一次加你都要往前前移乙個位,比如35×7,首先5×7得35,那麼此時add陣列中就是35,接下來3×7得21,看下面
3 5× 2 1
——————————
2 4 5
細節:1.只要其中乙個數是0,結果直接輸出,不用走下去,不然會打出多個0
2.**中的r用於表示乘積結果的十位數,比如5×7=35,我們會把5先填上,然後這裡的3就被r存著了
3.**中的t用於判斷是否滿10,是否需要進製
4.u用於記錄最高位長度
#include
#include
int lenx,leny;
int a[
100]
,b[100
],c[
100]
,add[
100]
;char x[
100]
,y[100];
intmain()
for(i=
1;i<=leny;i++
)//判斷乘數中是否為0if(
(lenx==
1&&a[1]
==0)||
(leny==
1&&b[1]
==0))
for(i=
1;i<=leny;i++
)//判斷是lenx還是lenx+1為最高位
if(t>
0||r>0)
r=0;
int q;
//開始高精度加法
//這裡的u+1特別重要,
//即還要判斷最高位加上對應add後是否又進了一位
for(k=i,q=
1;q<=u+
1;k++
,q++)}
//乘數a的位數+乘數b的位數-1<=乘積的位數<=乘數a的位數+乘數b的位數
int t1=lenx+leny-1;
if(add[t1+1]
>=
1) t1++
;//判斷當前位數是否為乘數a的位數+乘數b的位數
for(k=t1;k>=
1;k--
)return0;
}
高精度乘法(大數模擬高精度 小數快速高精度取模)
實現 n個數相乘,求出最後的值。但是太慢了啊!超時。一位一位的乘。但是這個也是一種方法吧,簡單的高精度,等再學學優化一下。include include include include include include include include include include includeus...
高精度減法,高精度乘法
高精度減法 oj資料偏弱如果新增乙個101 2就錯了,下面這一步是為了防止錯誤的 if a aa 0 可能出現第一位的1被借走的的情況,所以加乙個while找第乙個不是0的 while c i 0 i include include include include include include u...
高精度乘法
問題描述 給你兩個正整數a,b,計算它們的乘積。輸入格式 第一行乙個正整數a 第二行乙個正整數b 輸出格式 一行,表示a b 樣例輸入 111222333444555666777888999 999888777666555444333222111 樣例輸出 提示 a,b分別不超過100000位 ff...