码迷,mamicode.com
首页 > 其他好文 > 详细

精度计算-大数乘小数

时间:2015-05-21 15:38:46      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:算法   c语言   c   

精度计算-大数乘小数

    本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个小数(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]='\0';
}

精度计算-大数乘小数

标签:算法   c语言   c   

原文地址:http://blog.csdn.net/yejinwei1220/article/details/45891123

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!