這樣實現高精度的運算

2021-10-03 19:41:17 字數 3299 閱讀 9105

給定兩個正整數,計算它們的和

共兩行,每行包含乙個整數

輸出一行,包含所求的和

資料長度1

<=n

<

=1000000

1<=n<=1000000

1<=n

<=1

0000

00本題資料量龐大,資料長度有100w的長度,因此得將數使用字串來存,將數字拆開後倒序儲存,這樣有效解決進製而要改變陣列長度的問題,因此這樣處理方法簡單

將兩個數進行逐位相加,判斷進製則採用乙個標識t來判斷,所加和為n1+

n2+t

n_1+n_2+t

n1​+n2​+t

#includeusing namespace std;

vectoradd(vector&a, vector&b)

// 判斷最後是否進製

if(t) c.push_back(1);

return c;

}int main()

輸入

154540

2544111

輸出

2698651
對於大整數用字串進行存放,拆分後的每乙個數字用vector存放,從後開始往前存解決進製數字長度變化問題

迴圈次數取決於兩個數的長度

每次動態通過t /= 10判斷是否有進製

給定兩個正整數,計算它們的差

共兩行,每行包含乙個整數

輸出一行,包含所求的差

資料長度1

<=n

<=1

061<=n<=10^6

1<=n

<=1

06高精度減法需要判斷符號問題,考慮差存在負數情況,因此優先比較兩個數的大小

#includeusing namespace std;

// 判斷a是否 >= b

bool cmp(vector&a, vector&b)

// 否則相等直接返回true

return true;

}vectorsub(vector&a, vector&b)

// 去前導 0

while(c.size() > 1 && c.back() == 0) c.pop_back();

return c;

}int main()

else

return 0;

}

輸入

15454

2544111

輸出

-2528657
優先比較兩個數的大小,判斷每一位的差=0

>=0

>=0

還是<

0<0

<

0,來決定高位的借位

給定兩個正整數a和b,計算a∗b

a*ba∗

b的值共兩行,每行包含乙個整數

輸出一行,包含a∗b

a*ba∗

b的值資料長度:

1

<=a

<=1

061<=a<=10^6

1<=a

<=1

061

<=b

<=1

041<=b<=10^4

1<=b

<=1

04高精度乘法這裡採用乙個例項進行分析

設a ∗b

輸入

31442

245

輸出

7703290
高精度的乘法需要考慮到進製的問題,有些類似與高精度加法,只是每次相乘將b

bb看成乙個整體,分別與a

aa的每一位相乘

給定兩個正整數a和b,計算a/b

a / b

a/b的值

共兩行,每行包含乙個整數

輸出一行,包含a/b

a/ba/

b的值資料長度:

1

<=a

<=1

061<=a<=10^6

1<=a

<=1

061

<=b

<=1

041<=b<=10^4

1<=b

<=1

04高精度除法與其他三種運算方式不同,它是先計算高位,因此首先操作高位。

#includeusing namespace std;

vectordiv(vector&a, int b, int &r)

// 由於取的時候是從末尾開始取的,因此逆序,將其反轉

reverse(c.begin(), c.end());

// 去除前導0

while(c.size() > 1 && c.back() == 0) c.pop_back();

return c;

}int main()

輸入

9654

21

輸出

459

15

高精度的除法需要考慮每一位的儲存問題,因為他不同的是先運算的是高位,其次是低位,因此為了統一操作,除法仍然選擇相同的方式儲存,在運算得到的新陣列裡通過逆序,使其保持輸出一致

高精度運算

今天覆習了一下高精度運算。我覺得這種簡單的東西也得看一看,至少給自己留點兒低!高精度可以壓位的,但我今年懶得寫了 首先是加減法很簡單了,沒什麼值得特別強調的。高精度減法時別忘了,a時做下交換在計算,輸出時別忘了標記負號。高精度乘法需要注意的問題是,要在做完乘法之後再調整為十進位制。有的初學者小盆友喜...

高精度運算

雖說高精度直接考查的越來越少,不過還是以防萬一。define maxlen 1000 struct bint 本模板既可輸入字串,也可輸入整數 bint int t if len 1 len bint char str print number friend void print bint bi p...

高精度運算

name 高精度運算 author goal00001111 date 01 12 08 15 04 description 高精度運算 加減乘除,乘方,階乘 include include using namespace std void reverse string str void addin...