这道题可以由第一个乘数的已知末位数向前推出所有位上的数。
例如:
已知所给进制基数为10,第一个乘数的末位数为7,第二个乘数为4
列出如下式的乘法算式:
7
X 4
-------------------------- 进位为0
那么下一步将得到:
87
X 4
-------------------------- 进位为2
8下一步:
487
X 4
-------------------------- 进位为3
48
下一步:
9487
X 4
-------------------------- 进位为1
948
下一步:
79487
X 4
-------------------------- 进位为3
7948
下一步:
179487
X 4
-------------------------- 进位为3
17948
下一步:
179487
X 4
-------------------------- 进位为3
717948
至此得到第一个乘数。
本题按此方法模拟即可得到结果。
我的代码如下:#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
int base,d,f;
// base, last significant digit of the first factor, the second factor
while(cin >> base >> d >> f)
{
int count = 0;
//count for the first factor's digits number
int product, carry, next_digit;
//product of next_digit and f, carry of product baseed on base, next digit of the fist factor
next_digit = d;
carry = 0;
while(1)
{
count++;
product = next_digit*f;
if (product+carry == d)
{
break;
}
next_digit = (product+carry)%base;
carry = (product+carry)/base;
}
cout << count << endl;
}
return 0;
}