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

精度计算-大数乘小数

发布时间:2020-12-14 02:35:05 所属栏目:大数据 来源:网络整理
导读:精度计算-大数乘小数 ? ?? 本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个小数(10以内的数)。 算法思路是把大数的每一位都当做一个字符放入一个字符数组中,再从最后一位开始于要乘的小数相乘并加上前一位的进位,如果有进位存入一个变

精度计算-大数乘小数

? ?? 本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个小数(10以内的数)。
算法思路是把大数的每一位都当做一个字符放入一个字符数组中,再从最后一位开始于要乘的小数相乘并加上前一位的进位,如果有进位存入一个变量中,加到下一位的计算中去。
下面是我的C语言实现过程。
int main()
{
	char c[100] = "1231231231231231231231231231231232";
	char t[101] ;
	int m = 10;
	mult(c,t,m);
	printf("%s",t);
	return 0;
}

void mult(char c[],char t[],int m)
{
	int i,l,k,flag,add=0;
	char s[100];
	l=strlen(c);
	/*这个是把原大数数组传人真正进行运算的数组,
	  因为从低位开始运算所以要见原数组进行逆置,
	  因为是字符,所以运算的数要减轻字符‘0’的
	  ASCII码值然后再进行运算。
	*/
	for (i=0;i<l;i++)
		s[l-i-1]=c[i]-'0'; 
	//这个循环是用来从最小的一位开始于m相乘
	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;
		}
	}
	//flag是用来记录最高位做乘法时有进位的情况
	if (flag)
	{
		l=i+1;
		s[i]=add;
	}
	else
		l=i;
	//这个循环是用来把s数组的内容存到结果数组中
	for(i=0;i<l;i++)
		t[l-1-i]=s[i]+'0';
	t[l]='';
}

(编辑:李大同)

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

    推荐文章
      热点阅读