高精度演算法 A B Problem

2021-10-17 14:35:19 字數 2358 閱讀 5343

題目描述

高精度加法,相當於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陣列中,最好把整數...