欢迎来到天天文库
浏览记录
ID:30369878
大小:295.50 KB
页数:39页
时间:2018-12-29
《几个acm经典算法代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案一、数学问题1.精度计算——大数阶乘语法:intresult=factorial(intn);参数:n:n的阶乘返回值:阶乘结果的位数注意: 本程序直接输出n!的结果,需要返回结果请保留longa[] 需要math.h源程序: intfactorial(intn){longa[10000];inti,j,l,c,m=0,w;a[0]=1;for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]*i+c; c=a[j]/10000; a[j]=a[j
2、]%10000; } if(c>0){m++;a[m]=c;}}w=m*4+log10(a[m])+1;printf("%ld",a[m]);for(i=m-1;i>=0;i--)printf("%4.4ld",a[i]);returnw;}2.精度计算——乘法(大数乘小数)语法:mult(charc[],chart[],intm);参数:c[]:被乘数,用字符串表示,位数不限t[]:结果,用字符串表示m:乘数,限定10以内返回值:null注意: 需要string.h源程序: voidmult(charc[],chart[],intm){ inti,l,k,fl
3、ag,add=0; chars[100]; l=strlen(c); for(i=0;i=10){s[i]=k%10;add=k/10;flag=1;}else{s[i]=k;flag=0;add=0;} } if(flag){l=i+1;s[i]=add;}elsel=i; for(i=0;i4、 t[l-1-i]=s[i]+'0'; t[l]=' ';}3.精度计算——乘法(大数乘大数)语法:mult(chara[],charb[],chars[]);参数:a[]:被乘数,用字符串表示,位数不限b[]:乘数,用字符串表示,位数不限t[]:结果,用字符串表示返回值:null注意: 空间复杂度为o(n^2) 需要string.h源程序: voidmult(chara[],charb[],chars[]){ inti,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0; charresult[65]; ale5、n=strlen(a);blen=strlen(b); for(i=0;i=0;i--) { for(j=blen-1;j>=0;j--)sum=sum+res[i+blen-j-1][j]; result[k]=sum%10; k=k+1; sum=sum/10; } for(i=blen-2;6、i>=0;i--) { for(j=0;j<=i;j++)sum=sum+res[i-j][j]; result[k]=sum%10; k=k+1; sum=sum/10; } if(sum!=0){result[k]=sum;k=k+1;} for(i=0;i=0;i--)s[i]=result[k-1-i]; s[k]=' '; while(1) { 7、 if(strlen(s)!=strlen(a)&&s[0]=='0')精彩文档实用标准文案 strcpy(s,s+1); else break; }}4.精度计算——加法语法:add(chara[],charb[],chars[]);参数:a[]:被乘数,用字符串表示,位数不限b[]:乘数,用字符串表示,位数不限t[]:结果,用字符串表示返回值:nul
4、 t[l-1-i]=s[i]+'0'; t[l]=' ';}3.精度计算——乘法(大数乘大数)语法:mult(chara[],charb[],chars[]);参数:a[]:被乘数,用字符串表示,位数不限b[]:乘数,用字符串表示,位数不限t[]:结果,用字符串表示返回值:null注意: 空间复杂度为o(n^2) 需要string.h源程序: voidmult(chara[],charb[],chars[]){ inti,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0; charresult[65]; ale
5、n=strlen(a);blen=strlen(b); for(i=0;i=0;i--) { for(j=blen-1;j>=0;j--)sum=sum+res[i+blen-j-1][j]; result[k]=sum%10; k=k+1; sum=sum/10; } for(i=blen-2;
6、i>=0;i--) { for(j=0;j<=i;j++)sum=sum+res[i-j][j]; result[k]=sum%10; k=k+1; sum=sum/10; } if(sum!=0){result[k]=sum;k=k+1;} for(i=0;i=0;i--)s[i]=result[k-1-i]; s[k]=' '; while(1) {
7、 if(strlen(s)!=strlen(a)&&s[0]=='0')精彩文档实用标准文案 strcpy(s,s+1); else break; }}4.精度计算——加法语法:add(chara[],charb[],chars[]);参数:a[]:被乘数,用字符串表示,位数不限b[]:乘数,用字符串表示,位数不限t[]:结果,用字符串表示返回值:nul
此文档下载收益归作者所有