高精度算法

来源:互联网 发布:代码高亮java 编辑:程序博客网 时间:2024/05/21 10:23

/*任务:高精度,计算大数乘小数 **参数:乘法函数mul参数为 被乘数a[],保存最终结果的ans数组,乘数b*结果:ans数组中ans[0]为最高位,以此类推  */ #include <iostream>#include <string.h>using namespace std;void mul(char a[],char ans[],int b) {     int i,j,s,len,c=0;      char temp[1000];      len=strlen(a);  for (i=0;i<len;i++)          temp[len-i-1]=a[i]-'0'; for(j=0;j<len;j++){s=temp[j]*b+c;temp[j]=s%10;c=s/10; }while(c){//记录进位 temp[len++]=c%10;c/=10;   }     for (i=0;i<len;i++)ans[len-1-i]=temp[i]+'0';ans[len]='\0'; for(i=0;i<len;i++)cout<<ans[i];}int main(){char a[1000],ans[1000];int b;cin>>a>>b;mul(a,ans,b);return 0;}


/*任务:高精度,计算大数加大数 **参数:乘法函数mul参数为 被加数a[],加数b[],保存最终结果的ans数组*结果:ans数组中ans[0]为最高位,以此类推  */ #include <iostream>#include <string.h>using namespace std;int add(char a[],char b[],char ans[]) {     int i,j,s,len,c=0; int temp_a[10000],temp_b[10000],temp_ans[10000]; memset(ans,0,sizeof(ans)); memset(temp_a,0,sizeof(temp_a)); memset(temp_b,0,sizeof(temp_b)); memset(temp_ans,0,sizeof(temp_ans)); len=max(strlen(a),strlen(b));  for (i=0;i<strlen(a);i++)          temp_a[strlen(a)-i-1]=a[i]-'0';  for (i=0;i<strlen(b);i++)          temp_b[strlen(b)-i-1]=b[i]-'0';  for(j=0;j<len;j++){s=temp_a[j]+temp_b[j]+c;temp_ans[j]=s%10;c=s/10; } if(c) temp_ans[len++]=c;      for (i=0;i<len;i++)ans[len-1-i]=temp_ans[i]+'0'; ans[len]='\0';   for(int i=0;i<len;i++)cout<<ans[i]; cout<<endl;}int main(){char a[1000],b[1000],ans[1000];memset(a,0,sizeof(a));memset(b,0,sizeof(b));cin>>a>>b;add(a,b,ans);return 0;}


/*任务:计算N!**参数:阶乘函数fac的参数为N的值和保存最终结果的ans数组*结果:ans数组中ans[0]为最高位,以此类推 * */  #include <stdio.h>#include <string.h>#define MAX 50000void fac(int n,int*ans){int temp[1000]; int len=1;int i,j,c,s;memset(temp,0,sizeof(temp));memset(ans,0,sizeof(ans));temp[0]=1;for(i=1;i<=n;i++){c=0;for(j=0;j<len;j++){s=temp[j]*i+c;temp[j]=s%10;c=s/10;}while(c){//记录进位 temp[len++]=c%10;c/=10;   }}for (i=0;i<len;i++)ans[len-1-i]=temp[i];ans[len]='\0'; for(i=0;i<len;i++)printf("%d",ans[i]);printf("\n");} int main(){int n,k,i,j;int ans[MAX];while(scanf("%d",&n)!=EOF)fac(n,ans);return 0;}


原创粉丝点击