高精度算法(乘法)

同样的,模拟小学时候的,乘法运算.

 

下面程序是求解n!的一个程序.

通过修改最大值(n!的长度),可得到n!的精确值.

 

solve(char str[],int n,char key[])

函数的作用是,key=str*n,即通过key返回str*n的值.

 

 

#include<iostream> #include<cstring> using namespace std; #define MAX 10000//乘积的最大长度 void solve(char str[],int n,char key[]) //key=ans*n { int e,d; int i,j,k; int p; int len; len=strlen(str); for(i=0;i<MAX;i++) key[i]=’0′; j=0; do { p=n%10; n=n/10; e=0; for(k=0,i=len-1;i>=0;i–,k++) { d=(str[i]-‘0’)*p+key[k+j]-‘0’+e; e=d/10; key[k+j]=d%10+’0’; } while(e) { d=key[k+j]-‘0’+e; e=d/10; key[k+j]=d%10+’0′; k++; } j++; }while(n); for(i=MAX-1;i>=0;i–) { if(key[i]!=’0′) break; } for(j=0;j<=i;j++) str[j]=key[i-j]; str[j]=0; strcpy(key,str); } int main() { char str[MAX],key[MAX]; int n; int i; while(cin>>n) { str[0]=’1’; str[1]=0; for(i=1;i<=n;i++) { solve(str,i,key); strcpy(str,key); } cout<<key<<endl; cout<<endl; } return 0; }

点赞