PTA-L1-046 整除光棍 (20分)
我可能一遇到数学题我就必挂。
这道题相当于模拟。
为了找出一个光棍数可以整除输入给的数x,我们可以先找出第一个大于x的光棍数,除以x得到的商输出,余数在末尾加上一个1继续除以x,知道余数为0结束,这样就可以得到我们的答案了。
我们假设找到了一个光棍数ans,这个ans可以整除x,那么我们列算式的过程中就是我们前面的过程,得到余数,末尾加上一个1,一直到余数为0为止,得到的商就是我们要输出的s。
代码部分:
#include <bits/stdc++.h>
#define mst(a, n) memset(a, n, sizeof(a))
using namespace std;
const int N = 1e3 + 10;
typedef long long ll;
ll x;
ll s, n;
int main()
{
cin >> x;
ll t = 1;
n = 1;
while (t < x)
{
t = t * 10 + 1;
n++;
}
while (1)
{
if (!(t % x))
{
cout << t / x;
break;
}
else
{
cout << t / x;
t %= x;
t = t * 10 + 1;
n++;
}
}
cout << " " << n << endl;
return 0;
}