ACM常考算法
源程序:
void mult(char c[],char t[],int m) {
int i,l,k,flag,add=0; char s[100]; l=strlen(c);
for (i=0;i<l;i++)
s[l-i-1]=c[i]-'0';
for (i=0;i<l;i++) {
k=s[i]*m+add;
if (k>=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;}else l=i; for (i=0;i<l;i++)
t[l-1-i]=s[i]+'0'; t[l]='\0'; }
3.精度计算——乘法(大数乘大数)
语法:mult(char a[],char b[],char s[]); 参数:
a[]: 被乘数,用字符串表示,位数不限 b[]: 乘数,用字符串表示,位数不限 t[]: 结果,用字符串表示 返回
null 值: 注意: 源程序:
空间复杂度为 o(n^2) 需要 string.h
void mult(char a[],char b[],char s[]) {
int i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0; char result[65];
alen=strlen(a);blen=strlen(b);
for (i=0;i<alen;i++)
for (j=0;j<blen;j++) res[i][j]=(a[i]-'0')*(b[j]-'0'); for (i=alen-1;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;