最近写高精度写得有些烦,于是直接整了个高精度头文件。
不知道头文件怎样写的同学看这里:怎么用c++写一个自己的头文件?
头文件名字: c l e a r . h clear.h clear.h
包含函数:
clearplus(a,b);//高精加
clearmulti(a,b);//高精乘
cleardiv(a,b);//高精除
clearmod(a,b);//高精模
clearsqrt(a,b);//高精开根
//转载请注明出处。
#ifndef CLEAR_H
#define CLEAR_H
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 300+4;
const ll N=20010,mod=100000000,length=log(mod)/log(10);
ll m;
int d[100001],e[100001];
bool k,mm;
int tmp[MAXN] = {
};//交换用字符串
int a[100001],b[100001],c[100001],t[100001],p;
long long numa[50005],numb[50005],aans[50005],l1,l2,l,cnt2;
int work(int o,char *O,int I)
{
char c, *D=O ;
if(o>0)
{
for(l=0;D[l];D[l++]-=10)
{
D[l++]-=120;
D[l]-=110;
while(!work(0,O,l))
D[l]+=20;
putchar((D[l]+1032)/20);
}
putchar(10);
}
else
{
c=o+(D[I]+82)%10-(I>l/2)*(D[I-l+I]+72)/10-9;
D[I]+=I<0 ? 0 : !(o=work(c/10,O,I-1))*((c+999)%10-(D[I]+92)%10);
}
return o;
}
int clearplus(char a[],char b[]){
l1=strlen(a);
l2=strlen(b);
for(int i=l1-1;i>=0;--i){
numa[l1-i-1]=a[i]-'0';
}
for(int i=l2-1;i>=0;--i){
numb[cnt2]=b[i]-'0';
cnt2++;
}
l=max(l1,l2);
for(int i=0;i<l;++i){
aans[i]+=numa[i]+numb[i];
aans[i+1]=aans[i]/10;
aans[i]%=10;
}
if(aans[l]) l