这道题可以由第一个乘数的已知末位数向前推出所有位上的数。
例如:
已知所给进制基数为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; }