/*任务:高精度,计算大数乘小数 * *参数:乘法函数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 50000 void 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; }