高精度(模板)

2022-08-23 03:39:12 字數 1873 閱讀 5332

今天寫了一道需要高精度的模板題

結果高精乘寫錯一句,調了1個小時。。。sto

所以寫了一遍常用的高精度,在這裡再簡單說一下高精度的思路:

模擬豎式計算

注意每次累加的時候都要加上餘數d

有乙個額外操作:判斷兩數大小,確定答案符號

第一標準:長度

第二標準每一位數的大小

注意:因為在存貯的時候是倒敘儲存,所以在對比的時候也要從高位到低位倒敘對比

模擬豎式計算

借位的時候容易出錯

因為每一位最多不超過9,需要時只用從緊鄰的高位借1即可,不用麻煩的考慮其他情況

由於我在**中用的過載的方法,

傳入的引數是唯讀的,所以只有在處理減法的時候,需要複製一下被減數

超容易寫錯

二重迴圈

迴圈的次數是max(len)

在每一次加法的時候都要加上餘數

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

c.s[i+len]=x;

}

比較蒟,所以只會高除低

(其實高除高何以看作是高精減)

只要是除法,就可以看作是減法

但是高除低還有一種簡單的方法:

分組相除

把大數分成和低精度數字同級的數字(一般是3到4位一組)

每一組和低精度的數字直接做低精度除法

例如:

123512314/24

分組:(123)(512)(314)

儲存到陣列裡

first.

123/24=5……3

second.

3512/24=146……8

third.

8314/24=346……10

答案

123512314/24=5146346……10

所有的答案都要去除前導0

#include#include#includeusing namespace std;

const

int n=100010;

char s[n<<1],opt;

struct node

};node a,b,c;

node operator +(const node &a,const node &b)

if (d) c.s[++n]=d;

while (c.s[n]==0) n--;

c.len=n;

return c;

}node operator -(const node &aa,const node &b)

c.s[i]=a.s[i]-b.s[i];

}while (c.s[n]==0) n--;

c.len=n;

return c;

}node operator *(const node &a,const node &b)

c.s[i+len]=x;

}while (c.s[n]==0) n--;

c.len=n;

return c;

}int pd()

return0;}

void cl()

}int main()

else c=a*b;

if (p) printf("-");

for (int i=c.len;i>=1;i--)

printf("%d",c.s[i]);

return

0;}

高精度模板

include include include includeusing namespace std define maxn 9999 define maxsize 10 define dlen 4 class bignum bignum const int 將乙個int型別的變數轉化為大數 big...

高精度模板

include include include include include using namespace std const int maxn 1000 struct bign bign operator const char num 過載運算子 bign const char num 支援初...

高精度模板

include include include includeusing namespace std define maxn 9999 define maxsize 10 define dlen 4 class bignum 建構函式 bignum const int 將乙個int型別的變數轉化為大...