您的位置:首页 > 其它

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

2014-04-03 20:17 176 查看
程序实现的效果:

输入一个数(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: