请问这道题真的有无解情况吗,无解又是如何判断的呢,能否提供一组无解的数据呢?
如有解答,不胜感激。
以下为本人代码,只有50pts:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int a,d;
int v[5050000];
string c;
string b;
queue<pair<string,int> > q;
void bfs()
{
q.push(make_pair("1",1));
v[1]=1;
while(!q.empty())
{
string s=q.front().first;
int mod=q.front().second;
q.pop();
if(mod==0){c=s;break;}
if(v[mod*10%a]==0){v[mod*10%a]=1,q.push(make_pair(s+"0",mod*10%a));}
if(v[(mod*10+1)%a]==0){v[(mod*10+1)%a]=1,q.push(make_pair(s+"1",(mod*10+1)%a));}
}
}
int main()
{
scanf("%d",&a);
bfs();
int len=c.size();
for(int i=0;i<len;i++)
{
d=d*10+c[i]-'0';
if(d>=a) b+=(d/a)+'0';
d%=a;
}
if(!v[0]) cout<<"No Solution"<<endl;
//如果没有c对a的余数为0,则无解。
else cout<<b<<endl;
return 0;
}