高精度之+×÷

以下是三种高精度算术的模版:

高精度加法:

string s="0123456789",s1,s2;
int ss1[1005],ss2[1005],len;

void dashu(string s1,int ss1[])
{
    for(int i=s1.length()-1;i>=0;i--)
    {
        for(int j=0;j<10;j++)
        {
            if(s[j]==s1[i])
                ss1[s1.length()-1-i]=j;
        }
    }
}

void dashu_add(int ss1[],int ss2[])
{
    int len1=s1.length(),len2=s2.length();
    if(len1>len2)
        len=len1;
    else
        len=len2;
    for(int i=0;i<len;i++)
    {
        ss1[i]+=ss2[i];
        if(ss1[i]>=10)
        {
            ss1[i+1]+=ss1[i]/10;
            ss1[i]%=10;
        }
    }
    int l=-1;
    for(int i=len;i>=0;i--)
    {
        if(ss1[i]!=0)
        {
            l=i;
            break;
        }
    }
    if(l>=0)
    {
        for(;l>=0;l--)
            cout<<ss1[l];
    }
    else
        cout<<0;
}

相关题目链接:HDU 1002


高精度乘法:

void bignum_fac(int n)
{
    int a[100000];
    int m=1,b,d,i,j;
    memset(a,0,sizeof(a));
    a[1]=1;
    for(i=2;i<=n;i++)
    {
        d=0;
        for(j=1;j<=m;j++)
        {
            b=a[j]*i+d;
            a[j]=b%100000;
            d=b/100000;
        }
        if(d)
        {
            a[++m]=d;
        }
    }
    cout<<a[m];
    for(j=m-1;j>0;j--)
    {
        printf("%05d",a[j]);
    }
    printf("\n");
}

相关题目链接:HDU 1042


高精度除法:

char s[1005];
char division[1005];//存储进行高精度除法的数据

bool bignum_div(int x)
{
    int tot=0,num=0;
    for(int i=0;s[i];i++)
    {
        num=num*10+s[i]-'0';
        division[tot++]=num/x+'0';
        num%=x;
    }
    division[tot]='\0';//利于进行strcpy()
    if(num==0) //有适合的除数
    {
        int i=0;
        while(division[i]=='0')
            i++;
        strcpy(s,division+i);//比如49->07,那么下一轮s就变成7,多余的i个0都除掉
        return true;
    }
    else return false;
}
 相关题目链接:POJ 2325
posted @ 2016-02-28 16:32  &ATM  阅读(244)  评论(0编辑  收藏  举报
……