题目:
思路:
经尝试,逐渐增加光棍的位数确实会有超时。然后看了网上的一些解法,才知道还有这种操作:模拟竖式除法。和普通的竖式除法不同的是,它要在余数后面加上一,这样除出来的结果才相当于是在被除数后面加了一。以求13对应的光棍数为例,得先找到一个比13大的数,然后做这样的除法,算出来一位输出一位,如下图:
就是这么个意思
上代码:
#include <iostream> using namespace std; int main() { int n,count=1,mod; int single=1; cin>>n; while(single<n){ single=single*10+1; count++; } cout<<single/n; mod=single%n; while(1) { if(mod==0) { break; }else{ cout<<(mod*10+1)/n; mod=(mod*10+1)%n; count++; } } cout<<" "<<count; return 0; }