说明
hfz 最近了解到,有一种数字非常神奇,是可以给人带来好运的 "幸运数"。
如果一个数可以被它数位上的所有非零数字整除,那么就认为这个数是 "幸运数"
比如 288 就是一个幸运数,因为 288 可以被 2 和 8 整除
现在 hfz 想找到一个很大的幸运数,但是她又没有办法自己找到,所以需要寻求帮助
她自己有一个数字 n,她希望找到一个最小的 "幸运数 x", 满足 x >= n
输入格式
输入第一行包含一个整数 T 表示有多次询问
对于每次询问输入一个整数 n,含义如题
对于 30% 的数据保证 T <= 10, 1 <= n <= 1000
对于 100% 的数据保证 T <= 1000, 1 <= n <= 10^18
输出格式
对于每次询问,输出对应的幸运数
样例
输入数据 1
2
1
285
输出数据 1
1
288

标程
#include <bits/stdc++.h>
#define int long long
using namespace std;
int t,n;
short vis[50000001];
signed main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
int i = n;
while(1)
{
if(i < 50000001 && vis[i] == 1)
{
printf("%lld\n",i);
break;
}
if(i < 50000001 && vis[i] == 2)
{
i++;
continue;
}
int p = i,fl = 0;
while(p)
{
if(p % 10 != 0 && i % (p % 10) != 0)
{
fl = 1;
break;
}
p /= 10;
}
if(fl == 0)
{
printf("%lld\n",i);
if(i < 50000001) vis[i] = 1;
break;
}
if(i < 50000001) vis[i] = 2;
i++;
}
}
return 0;
}
2574

被折叠的 条评论
为什么被折叠?



