題目描述
高精度加法,相當於a+b problem,不用考慮負數。
輸入格式
分兩行輸入。a, b <= 10^500。
輸出格式
輸出只有一行,代表a+b的值。
輸入輸出樣例
輸入#111
輸出#1
輸入#2
1001
9099
輸出#2
原題鏈結 : : 4位元組,32位,範圍[-2^31, 2^31-1] , 10^9數量級
unsigned
long long : 8位元組, 64位, 範圍[-2^63, 2^63-1] , 10^18數量級
unsigned long long : 8位元組, 64位, 範圍[0, 2^64-1] , 10^19次方數量級
附:2的63次方=9.223372036854776000+18
2的64次方=1.8446744073709552000e+19
2的31次方=2.147483648e+9
題幹 a, b 數量級超出 int, long long 以及 unsiged long long 的範圍,需要採用 高精度演算法 解決這道題。
2.關於高精度加法:
實現過程: 字串接收輸入 — 將字元轉化為數字,並轉置放置在新陣列中 — 數值相加,用另乙個陣列接收結果 — 加完後,輸出結果。
核心**:
c[i]
+= a[i]
+ b[i]
;//注意這一步是累加(要先算出c[i]的值才可以求得商和餘數)
c[i +1]
= c[i]/10
;//進製
c[i]
= c[i]%10
;//存餘
#include
#include
using
namespace std;
char s1[
503]
, s2[
503]
;int a[
503]
, b[
503]
, c[
503]
;int la, lb, lc;
intmain()
if(c[lc]==0
)//刪除前導0
lc--
;for
(int i = lc; i >
0; i--
)//輸出c[lc] ~ c[1]
cout << c[i]
;return0;
}
1.開503的大小一定夠,恰好夠,讀者可以思考一下,有利於鍛鍊自己對陣列的把控。
char s1[
503]
, s2[
503]
;int a[
503]
, b[
503]
, c[
503]
;
2.迴圈條件這麼設定的原因:陣列s2存放字元的位置是0~lb-1。
for
(int i =
0; i < lb; i++
) b[lb - i]
= s2[i]
-'0'
;
3.對存放結果的陣列c多設一位是為了放最高位進的數。
另:命名空間std中有max()函式。
lc =
max(la, lb)+1
;
4.if語句不同於for迴圈語句,if語句只做一次判斷,0-1次操作;而for語句是迴圈著做0-n次操作;因為在這裡我們只想做 「判斷最高位是否為0(一次判斷),如果是,就刪除前導零(具體操作是lc- - );不是就不用lc- -(0-1次操作)」 所以在這裡僅用乙個if語句就可以了。
if
(c[lc]==0
)//刪除前導0
lc--
;
學習演算法的過程不僅要學習每種演算法的實現,更要去學習演算法的設計思維
1.用字元陣列接收輸入資料而不是用整型陣列直接接收,是因為字元陣列可以整體輸入。
2.要將字元轉化為數值,是因為數值間才可以有所謂的相加進製。
3.轉置放置轉化結果,一方面解決了要相加的兩個數字置不一致的問題,另一方面解決了最高位相加進製的問題。
程式設計是一門藝術!希望讀者在程式設計中找到樂趣!
如果覺得本文有幫助到您,下方一鍵三連,助力一下博主!(ノ◕ω◕)ノx₍₍◡( ╹◡╹ )◡₎₎╰( ´・ω・)つ──☆✿✿✿ 感謝!感謝!
P1303 A B Problem(高精度乘法)
題目描述 求兩數的積。輸入格式 兩行,兩個數。輸出格式 積輸入輸出樣例 輸入 1 複製1 2 輸出 1 複製 2說明 提示 每個數字不超過10 2000,需用高精 思路 模仿豎式乘法 大數乘法 include include using namespace std const int max 100...
演算法 高精度乘法2(高精度乘高精度)
題目描述 高精度乘,求兩個很大的非負整數相乘的結果。輸入 2個非負整數,每個一行,每個整數不超過240位。輸出 乙個整數,表示相乘的結果。例子 為了和演算法對應方便,用上面數乘下面數的方法12 5 2512 5502 5312 5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0 1234 56...
高精度演算法 791 高精度加法
給定兩個正整數,計算它們的和。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整數長度 100000 輸入樣例 1223 輸出樣例 35注意點 1.兩個整數較大,用字串來存,這樣的話,可以呼叫它的size 方法 2.將兩個大的整數,存入vector陣列中,最好把整數...