128 带有小数的浮点数 大数乘法
发布时间:2020-12-14 02:57:15 所属栏目:大数据 来源:网络整理
导读:28、两个数相乘,小数点后位数没有限制,请写一个高精度算法 ? ? ?? 大数乘法,注意小数点的控制。 这里小数点的个数,是根据两个乘数决定的,没有去除末尾的0 /*28、两个数相乘,小数点后位数没有限制,请写一个高精度算法*/ #includeiostream#includealgor
28、两个数相乘,小数点后位数没有限制,请写一个高精度算法 ?? ?? 大数乘法,注意小数点的控制。 这里小数点的个数,是根据两个乘数决定的,没有去除末尾的0
/* 28、两个数相乘,小数点后位数没有限制,请写一个高精度算法 */ #include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> using namespace std; char a[100],b[100]; int n1[100],n2[100],ans[200]; int main() { int t,i,j,len1,len2,r1,r2,k,k1,k2,tmp,index; printf("请输入2个整数,输入(-1)结束:n"); while(1) { scanf("%s",a); if(strcmp(a,"-1")==0) break; scanf("%s",b); len1=strlen(a); len2=strlen(b); memset(n1,sizeof(n1)); memset(n2,sizeof(n2)); memset(ans,sizeof(ans)); k1=0; r1=r2=0; for(i=0;i<len1;i++) { if(a[i]=='.') r1=len1-(i+1);//记录小数点位置 else n1[k1++]=a[i]-'0'; } k2=0; for(i=0;i<len2;i++) { if(b[i]=='.') r2=len2-(i+1); else n2[k2++]=b[i]-'0'; } k=0; for(i=k1-1;i>=0;i--) { index=k++; t=0; for(j=k2-1;j>=0;j--) { tmp=ans[index]+n1[i]*n2[j]+t; ans[index++]=tmp%10; t=tmp/10; } ans[index]=t; } i=index; while(ans[i]==0&&i>r1+r2)i--;//去除前面0 printf("%s * %s = ",a,b); //i>r1+r2 0.保证小数点前至少有整数 for(;i>=0;i--) { printf("%d",ans[i]); if(i==(r1+r2)&&r1+r2)//小数点位数0 不输出 printf("."); } printf("n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |