實質
高精度演算法的實質就是模擬小學豎式分類
按運算分類有如何將高精數轉化高精加高精,高精減高精
高精乘低精,高精除低精
按儲存型別分類有
字串(每一位只存乙個數,輸入輸出方便)
陣列(每一位可存多位數,輸入輸出麻煩)
總結
根據時間複雜度而言,通常高精乘低精用陣列,其他都用字串
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 任務 高精度,...