高精度计算——乘法与加法
高精度计算算是各种竞赛的基础性题目了,在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