开long long循环解题,只拿了15分
再次读题,题目的答案是光棍数 / x = s
我们思考下除法的本质,是不是会发现答案的每一位都是每除一次的商
然后剩下的余数*10加上后面一位,也就是说除法实际上只和两位数有关
前面被算过了就可以不考虑了,而光棍数我们知道全是1
所以后面我们只要补1就行,这样用int就能存下
那这样我们先找到比x大的第一个光棍数,然后每次除以x
输出商,再把剩下的余数*10+1,不断循环
直到余数为0,表示整除完了
定义第一个数为1,循环找到比x大且最小的光棍数
之后每除一次输出一位,如果有余数就先乘10再加1继续除
注意我们还要得到1的个数,所以我们定义一个count=1(最后一个数字会跳出,无法让count++,所以我们直接定义count=1,而不是count=0),在我们求每一个数字的时候都要让count++。
下面这个也可以看看,很有想法
#include <iostream>
using namespace std;
int main() {
int x = 0, count = 1, v = 1;
cin >> x;
while (v < x) {
v = v * 10 + 1;
count++;
}
while (1) {
cout << v / x;
if (v % x == 0) break;
else {
v = v % x * 10 + 1;
count++;
}
}
cout << " " << count;
return 0;
}