【笔记8-2】C语言编程题系列:大数乘法

C语言编程题系列:大数乘法

高精度乘法其实也就是大数乘法,和大数加法一样由于超过了普通数据类型的范围,所以需要使用数组来存储数据和计算,数组计算过程中有以下几个问题需要注意:

  1. 输入数据时应该用字符串的形式(保证每个元素都是一位数)
  2. 计算时应该将字符串转换为int型数组方便计算
  3. 计算过程要注意按位相乘,错位相加,比如123x456计算过程是123x6+123x5x10+123x4x100的结果,这里如果实在看不懂可以在纸上列竖式演算一下,能帮助理解,在代码中利用一个双重for循环就能解决
  4. 注意处理进位
    综上所述,大数乘法的大概思路如下:
  5. 将两个操作数以字符形式输入
  6. 将操作数转换成int型计算
  7. 利用循环进行计算和处理进位
  8. 输出
    本程序中的操作并不难,如果事先了解过大数加法的人很容易理解,具体代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
	
	char a[10001],b[10001] ;
	int c[10001],d[10001],x[20000]={0};
	int i=0,j=0,k=0,max=0,m=0,n=0;
	scanf("%s%s",a,b);                      //以字符串形式将数据输入 
	
	
	for(i=0;i<=strlen(a)-1;i++)            //将char转换成int以便计算 
	{
	c[i]=a[i]-'0';
	}
	for(j=0;j<=strlen(b)-1;j++)            //这里没有将两个字符串倒序 
	{
	d[j]=b[j]-'0';
	}
	
	
	m=i;
	n=j;
	for(i=0;i<m;i++)                       //两个数组按照数位依次相乘 
	for(j=0;j<n;j++)					
	{
	x[i+j]+=c[i]*d[j];                    //相当于列竖式计算,这里不好描述,最好是自己写个竖式算一下 
	}
	
	
	for(i=m+n-1;i>0;i--)               //由于上一步循环计算没有对进位进行处理,所以有的数组元素是两位数 
	{								   //这一步处理进位 
	x[i-1]+=x[i]/10;
	x[i]=x[i]%10;
	}
	
	
	for(i=0;i<m+n-1;i++)
	{
	printf("%d",x[i]);
	}
	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值