程序实现的效果:
输入一个数(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