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

来源:互联网 发布:戴眼镜软件 编辑:程序博客网 时间:2024/05/08 08:04

程序实现的效果:

输入一个数(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 ;}elsel=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
原创粉丝点击