演算法 string型別(大數)的除法

2021-10-05 08:19:50 字數 1370 閱讀 9631

題目

求乙個數字字串a與數字字串b的除法,並保留到小數點的後100位。
假設我們要求字串 「1」 與 "3"的除法,要求保留到小數點後的100位。

我們求string類的除法,即大數的減法。就得先明白減法的原理。一開始1/3,不夠除,所以我們要進製成10/3得到3,

這裡的10/3得到3,就是因為10-3 ,進行減法操作,進行了3次。所以小數點後就是0.3,10/3餘1,繼續用餘數1來除以3,不夠除,進製到10繼續上述的步驟到0.33 。 繼續上述的步驟到小數點後101位即可。(101位是要考慮進製)

所以,除法操作其實就是減法操作

詳細string減法減法見

#include

#include

#include

using

namespace std;

intcmp

(string a, string b)

//有可能a 為"00" b為"4",所以要去0

}string substract

(string a, string b)

//進行減法操作

else

//要借位了

//這裡可以保證 i+k這一位上不是0

a[i + k]

= a[i + k]

-'1'

+'0'

;// a[i+k] - '1'是整數,整數還要變成字元

// a[i] - '0'是整數 b[i] - '0'是整數

a[i]

= a[i]

-'0'+10

-(b[i]

-'0')+

'0';}}

reverse

(a.begin()

, a.

end())

;//翻轉過來

if(a.

find_first_not_of

('0'

)== string::npos)

//從頭到尾全是0,則直接返回0,

return

"0";

return a.

substr

(a.find_first_not_of

('0'))

;}string divide

(string a, string b)

//只考慮a小於b的情況

ans.

(to_string

(t));}

return ans;

}int

main()

高精度演算法 大數除法

由於被除數很大超過了longlong或者unsigned longlong,就需要使用大數除法。給定兩個正整數a,b,請你計算 a b的商和餘數。輸入格式 共兩行,第一行包含整數a,第二行包含整數b。輸出格式 共兩行,第一行輸出所求的商,第二行輸出所求餘數。資料範圍 1 a的長度 100000 1 ...

Redis五大資料型別 String

string型別是redis最基本的資料型別乙個鍵最大能儲存512mb set key value,set用於給key設定值,如果key已經有值了set會複寫舊值 get key,使用者獲取指定key的值,如果key不存在返回nil,如果key儲存的不是字串型別,返回乙個錯誤 setnx key v...

Redis五大資料型別 String

string 是 redis 最基本的型別,乙個 key 對應乙個 value。string 型別的值最大能儲存 512mb。基本命令 127.0.0.1 6379 set key1 hello 設定值 ok127.0.0.1 6379 get key1 獲取值 hello 127.0.0.1 63...