UVa 550: Multiplying by Rotation

来源:互联网 发布:怎么用网络电视看卫视 编辑:程序博客网 时间:2024/04/28 03:21

这道题可以由第一个乘数的已知末位数向前推出所有位上的数。

例如:

已知所给进制基数为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 factorwhile(cin >> base >> d >> f){int count = 0;//count for the first factor's digits numberint product, carry, next_digit;//product of next_digit and f, carry of product baseed on base, next digit of the fist factornext_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;}