hfz 的幸运数

说明

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值