#pat天梯赛 L1-046 整除光棍
题目地址:https://pintia.cn/problem-sets/994805046380707840/problems/994805084284633088
题目大意:一个全部由1组成的数叫做光棍数,可以证明任何一个末尾不是5的奇数都可以被光棍数整除,现在给你一个数x要你求出可以整除x的最小的一个光棍数,并输出商和光棍数的位数
思路:由于x范围较大,可能会使光棍数非常大,甚至超出了long long 的范围,所以如果按照朴素的思路不断构造由1构成的数,并记录位数然后判断能不能整除,肯定不行,所以我们模拟除法运算,从最高位算起如果余数不为0,就在余数后面添一个1一直到余数为0,因为余数为0就说明除尽了,在除的过程我们可以把商输出,过程中计数器计数,最后输出计数器的值即可
下面看代码:
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
int x,n=1,cnt=0,flag=0;
cin>>x;
while(1)
{
cnt++;
if(n/x||flag)
{
cout<<n/x;
flag=1;
}
n=n%x;
if(n==0)
break;
n=n*10+1;
}
cout<<' '<<cnt;
return 0;
}