我正在尝试解决this spoj problem。
问题陈述:某些正整数的十进制表示仅由1和0组成,并且至少有一个数字,例如101.如果正整数没有这样的属性,可以尝试将其乘以某个正整数,以确定该产品是否具有此属性。
我正在尝试BFS方法,从1开始(因为第一个数字应该是1),每一步我排队num * 10(追加零)和num * 10 + 1(追加一个)并检查是否它可以被输入数字整除。
我认为我的方法是正确的,但我无法处理大整数。我已经在使用unsigned long long int了。我读了几篇SO文章和论坛寻求帮助,但无法理解它们。我所知道的是有一种方法可以在不存储整个号码的情况下完成此操作。
有人会对它有所了解吗?
以下是我尝试的代码
#include<iostream>
#include<cstdlib>
#include<sstream>
#include<queue>
using namespace std;
unsigned long long int BFS(unsigned long long int s,unsigned long long int k)
{
unsigned long long int x;
queue<unsigned long long int>q;
q.push(s);
while(!q.empty())
{
x=q.front();
q.pop();
if(x%k==0)
{
return x;
}
q.push(x*10);
q.push(x*10+1);
}
}
int main()
{
unsigned long long int t,n;
cin>>t;
while(t--)
{
cin>>n;
cout<<BFS(1,n)<<endl;
}
return 0;
}