原题链接:PTA整除光棍
输入样例:
31
输出样例:
3584229390681 15
这一题我一开始没有做出来,以为直接暴力穷举即可,但是位数太大,又需要采用高精度除法,不过这一题没有必要,我们来看思路,模拟整除,算法性较强,将s看作被除数,x看作除数,即s / x得形式,以得到商,留下余数,判断余数大小,如果为0则刚好被整除,可以退出,否则,对s扩展一位,注意这里的扩展是以 1 结尾,所以结尾需要加 1 ,因为这样才能保证原数以类似1 11 111 1111…形式出现,而我们每次所求的商即为需要输出的数。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int x, s = 0, n = 0;
cin >> x;
while (s < x) {
s = s * 10 + 1;
++n;
}
while (true) {
//迭代的思想
cout << s / x;
s %= x;
if (s == 0) break;
s = s * 10 + 1;
++n;
}
cout << " " << n << endl;
return 0;
}