高精 归纳

来源:互联网 发布:阿里巴巴标题优化工具 编辑:程序博客网 时间:2024/04/28 07:58

方法一:

高精子函数,目前见到的两个,大同小异,用的时候随便选就行了,通用性强,推荐:

子函数一:

string add(string s1,string s2){    if(s1==""&&s2=="") return "0";    if(s1=="") return s2;    if(s2=="") return s1;    int j,l,la,lb;    string max,min;    max=s1;min=s2;    if(s1.length()<s2.length()) {max=s2;min=s1;}    la=max.size();lb=min.size();    l=la-1;    for(j=lb-1;j>=0;j--) max[l--] += min[j]-'0';     for(j=la-1;j>=1;j--) if(max[j]>'9'){max[j]-=10;max[j-1]++;}    if(max[0]>'9') {max[0]-=10;max='1'+max;}    return max;}

子函数二:

string Sum(string a,string b){    if(a.length()<b.length())    {        string temp=a; a=b; b=temp;    }    int i,j;    for(i=a.length()-1,j=b.length()-1;i>=0;i--,j--)    {        a[i]=(a[i]+(j>=0?b[j]-'0':0));        if(a[i]>'9')        {            a[i] -=10;            if(i) a[i-1]++;            else a='1'+a;        }    }    return a;}
方法二:

将数组设置为定长,代表题目为woj1036,博客链接为:http://blog.csdn.net/czl1252409767/article/details/8863554

const int LEN=134;void add(char *b,const char *a,int lenb,int lena)//高精加法{    int i=lenb,j=lena;    while(i>=0)    {        b[i] +=a[j]-'0';        if(b[i]>'9')        {            b[i] -=10;            b[i-1]++;        }        i--; j--;    }}

//n的阶乘,n<=100const int maxn = 3000;int f[maxn];int main(){    int i,j,n;    cin>>n;    memset(f,0,sizeof(f));    f[0]=1;    for(i=2;i<=n;i++)    {        int c;        for(j=0;j<maxn;j++)        {            int tmp=f[j]*i+c;            f[j]=tmp%10;            c = tmp/10;        }    }    j=maxn-1;    while(!f[j]) j--;    for(i=j;i>=0;i--) cout<<f[i];}

方法三:

直接用JAVABigInteger

public static void main(String[] args) {  BigInteger aa =new BigInteger("100");  BigInteger bb= new BigInteger("25");  BigInteger sub=aa.subtract(bb);//大整数的减  BigInteger add=aa.add(bb);//大整数的加  BigInteger mul=aa.multiply(bb);//大整数的乘  BigInteger div=aa.divide(bb);//大整数的除  System.out.println(sub.toString());  System.out.println(add.toString());  System.out.println(mul.toString());  System.out.println(div.toString()); }


持续更新中...