高精度運算總結

2022-10-11 09:30:12 字數 3127 閱讀 4807

日期:2023年5月18日

資料型別

定義識別符號

資料範圍

整型int

-231~231-1(≈2×109)

長整型long long

-263~263-1

無符號長整型

unsigned long long

0~264-1

上面給出的範圍的數稱為單精度數,對應的運算稱為單精度運算。

超出上面給出的範圍的數稱為高精度數(注:嘗試使用這些範圍儲存的話會導致溢位),對應的運算稱為高精度運算。

將輸入的數字匯入某一陣列(注:不同的數需要匯入不同陣列),並在該陣列中模擬計算過程,最後將陣列中的數字輸出。

注:陣列中的每乙個位置應只儲存乙個位數的數字,否則在輸出時可能會出現問題。

#includeusing

namespace

std;

char s[510];//

這個字元陣列作為資料的「中轉站」,最終將資料匯入陣列中

struct

bigint;

bigint

operator +(bigint a,bigint b)

for(int i=1;i<=k;++i)//

進製

if(a.v[k+1

])

//如果最高位也存在進製,增加k的長度

//嚴格來說,應該檢查不止一位。但因為加法最多會增加一位,所以檢查與否都無足輕重,然而在高精度乘法中會顯得尤為必要

a.length=k;

returna;}

bigint a,b;

intmain()

a.length=n;//

賦值 scanf("

%s",s+1

); n=strlen(s+1

);

for(int i=1;i<=n;++i)

b.length=n;

a=a+b;//

相加。這裡的+使用的是重新載入的+

for(int i=a.length;i>=1;--i)

return0;

}

1 #include2

using

namespace

std;

3const

int n=10186;4

struct

bigint;

8bigint a,b,c;

9char

s[n];

10 bigint read()

18 c.length=n;

19return

c;20}21

bool

operator >=(bigint a,bigint b)

28if(m2932

for(int i=n;i>0;--i)

3338

if(a.v[i]3942}43

return

true;44

}45 bigint operator -(bigint a,bigint b)

54 a.v[i]-=b.v[i];55}

56while(a.v[k]==0&&k>1)57

60 a.length=k;

61return

a;62}63

intmain()else

//都是大的數減小的數,如果a73

for(int i=a.length;i>0;--i)

74//

同理,倒過來輸出

77return0;

78 }

1 #include2

using

namespace

std;

3char s[2500];4

int result[4005]=,rlength;

5struct

bigint;

9 bigint operator *(bigint a,bigint b)16}

17for(int i=1;i<=4001;++i)

1822 rlength=a.length+b.length;

23while(result[rlength]==0&&rlength>1)24

//乘法最高位可能不止進一位,但因為所得結果的最多位數為a的位數,b的位數,可以從最多位數開始向後遍歷,在遇到不為0的數前且位數不為1時(考慮到結果為0的情況),將估計位數縮減27}

28bigint a,b;

29int

main()

36 a.length=n;

37 scanf("

%s",s+1

);38 n=strlen(s+1

);39

for(int i=1;i<=n;++i)

4043 b.length=n;

44 a=a*b;

45for(int i=rlength;i>=1;--i)

4649

return0;

50 }

1 #include2

using

namespace

std;

3const

int n=5100;4

struct

bigint;

8 bigint operator /(bigint a,long

long

b)22

while(a.v[k]==0&&k>1)23

26 a.length=k;

27return

a;28}29

bigint a;

30long

long

b;31

char

s[n];

32int

main()

39 a.length=n;

40 scanf("

%lld

",&b);

41 a=a/b;

42for(int i=a.length;i>=1;--i)

4346

return0;

47 }

高精度運算

今天覆習了一下高精度運算。我覺得這種簡單的東西也得看一看,至少給自己留點兒低!高精度可以壓位的,但我今年懶得寫了 首先是加減法很簡單了,沒什麼值得特別強調的。高精度減法時別忘了,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...