对大数精度的处理(2)_大数乘小数

程序实现的效果:

输入一个数(10以内),再输入一个大数(位数不限);

输出两者的乘积过程中进位情况,以及乘积结果值。

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
	
	int m,k,flag;
	char c[100],t[1000];
	char s[100];
	cin>>m;
	int i,l=0,add=0;
	scanf("%s",c);
	l=strlen(c);
	for(i=0;i<l;i++)//将字符串数组c[],倒序赋值给字符数组s[],因为按照乘法法则,先从个位开始
	s[l-i-1]=c[i]-'0';
     
    for(i=0;i<l;i++)
	{
		k = s[i] * m + add;//k等于每一位(先从个位开始,‘个十百千的顺序’)与 m 相乘的结果,add表示进位数。
		if(k >= 10){
			s[i] = k % 10;
			add = k / 10;
			flag = 1;//flag表示是否有进位(即k是否大于‘10’)的两种情况,等于‘1’,为有,否则,等于‘0’,为无。
		}
		else{
			s[i] = k;
			flag = 0;
			add = 0;
		}
		cout<<add<<endl;
	}
		if(flag){//根据flag的取值判断,长度 l,是否增加‘1’.从而判断s[i]的值,是否为add;
			l = i + 1 ;
			s[i] = add ;
		}
		else
			l=i;

		for(i=0;i<l;i++){//把字符数组s[],倒序赋值给字符数组t[],就可以把结果正序输出。
		t[l-i-1] = s[i] + '0';
		t[l] = '\0';
		
		}
		for(i=0;i<l;i++)
        cout<<t[i];
	cout<<endl;
	return 0;
}

输入输出样例:

5
123456
3
2
2
1
1
0
617280
Press any key to continue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值