加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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;
} 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读