高精度计算——乘法与加法

高精度计算算是各种竞赛的基础性题目了,在poj上做了3道,就小小的总结一下。

首先,高精度乘法。典型的例子是阶乘: 即输入n,计算n!

#include<iostream>
using namespace std;

const int maxn=3000;
imt f[maxn];

int main()
{
    int i,j,n;
    cin>>n;
    memset(f,0,sizeof(f));
    f[0]=1;  //初始时,设结果是1,则下面从2开始
    for(i=2;i<=n;i++)
    { //乘以i
        int c=0;//记录进位
        for(j=0;j<maxn;j++)
        {
            int s=f[j]*i+c;//计算某个位计算后的结果
            f[j]=s%10;
            c=s/10;
        }
    }
    //忽略数组中的前导0
    for(j=maxn-1;j>=0;j--) if(f[j]) break;
    //输入有效位
    for(i=j;i>=0;i--) cout<<f[i];
    cout<<endl;
    
    return 0;
}

上面代码中,比较重要是两个循环中进行的乘法模拟,然后是最后的对前导0的忽略。

高精度加法很简单,主要就是模拟逐位的加法,如果超过了9,则进行取余,并且对下一位进1

poj里面这次做的3道是1001,1047,1503

posted on 2013-07-26 21:21  soyscut  阅读(176)  评论(0编辑  收藏  举报

导航