高中學的是vector實現的高精度,很不好寫。今天學習了字串陣列實現的高精度,直接用陣列下標作為位移量,感覺比較自然。就拿它作為今後的模板了。該模板主要來自於大佬自己在某些細節處作了一些改動,以符合自己的習慣。
//高精+高精
#include#include#includeusing namespace std;
const int l=110;
string add(string a,string b)//兩個非負整數相加
,nb[l]=;
int la=a.size(),lb=b.size();
for(int i=0;ilb?la:lb;
for(int i=0;i=0;i--) ans+=na[i]+'0';
return ans;
}int main()
int main()
int main()
int main()
string div(string n1,string n2,int nn)//n1,n2是字串表示的被除數,除數,nn是選擇返回商還是餘數
}if(!r[t])t--;
for(int i=t;i>=0;i--)s+=r[i]+'0';
int pos=la;
while((!a[--pos])&&pos)continue;
pos++;
for(int i=pos-1;i>=0;i--)v+=a[i]+'0';
if(nn==1) return s;
if(nn==2) return v;
}int main()
{ string a,b;
while(cin>>a>>b) cout<#includeusing namespace std;
string div(string a,int b)//高精度a除以單精度b
{ string r,ans;
int d=0;
if(a=="0") return a;//特判
for(int i=0;i>a>>b)
{cout<#includeusing namespace std;
int mod(string a,int b)//高精度a%單精度b
{ int d=0;
for(int i=0;i>a>>b)
{cout《另外,高精度寫起來很麻煩,自己又在這位大佬的blog學習了兩種黑科技
1.假如要算x*y%m,而x*y會爆longlong,可以這樣分解:x=(x/p*p+x%p),y=(y/p*p+y%p),其中p是乙個大數,比如10^9,這樣的話用乘法分配律將x*y分解為4項,並每項取模相加,就不會爆longlong了。
2.算x*y%m,將x強制轉化為double再算出double型別的結果,然後看離哪個整型值近就轉換回去。
高精度模板
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型別的變數轉化為大...