高精度乘法 完全的函數封裝!
高精度計算是NOIP中常考常用的算法之一,剛才把我們班康運澤同學寫的高精度乘法要了過來,改成了完全的封裝函數,貼了出來。
代碼如下:
#include<fstream> using namespace std; ifstream fin("mul.in"); ofstream fout("mul.out"); int e[220]={5}; int gjdcf(char *mul,char *mul2) { int i,j,lq,lw,q[110],w[110],temp; lq=strlen(mul); for (i=0;i<lq;i++) { q[lq-1-i]=mul[i]-'0'; } lw=strlen(mul2); for (i=0;i<lw;i++) { w[lw-1-i]=mul2[i]-'0'; } if (lq<lw) { for (i=0;i<lw;i++) { temp=q[i]; q[i]=w[i]; w[i]=temp; } temp=lq; lq=lw; lw=temp; } for (i=0;i<(lq+lw+1);i++) { e[i]=0; } for (i=0;i<lw;i++) { for (j=0;j<lq;j++) { if ((e[j+i-1]>=10)&&((j+i-1)>=0)) { e[j+i]=e[j+i]+e[j+i-1]/10; e[j+i-1]=e[j+i-1]%10; } if ((w[i]*q[j])<10) { e[j+i]=(w[i]*q[j])+e[j+i]; } if ((w[i]*q[j])>=10) { e[j+i+1]=(w[i]*q[j])/10+e[j+i+1]; e[j+i]=(w[i]*q[j])%10+e[j+i]; } if ((e[j+i])>=10) { e[j+i+1]=e[j+i]/10+e[j+i+1]; e[j+i]=e[j+i]%10; } } } return lq+lw; } void print(int p) { int i; if (e[p-2]==0) { fout<<0; } else { if ((e[p-1]==0)&&(e[p-2]!=0)) { for (i=p-2;i>=0;i--) { fout<<e[i]; } } else { for (i=p-1;i>=0;i--) { fout<<e[i]; } } } } int main() { char aa[101],bb[101]; fin>>aa>>bb; print(gjdcf(aa,bb)); return 0; }