CF2132B
Solution
在 $x$ 后面加上 $k$ 个 $0$,就是 $x*10^k$。
所以题目就转成了给你 $x\times 10^k+x$,求所有可能的 $x$。
我们发现这个数是小于 $10^{18}$ 的。所以我们枚举 $k$ 从 $1$ 到 $18$。然后因为 $x\times 10^k+x=x\times (10^k+1)$,所以就看看 $x$ 能否整除 $10^k+1$,如果可以就除然后加入答案。最后记得排序。
Code
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
using LL=long long;
LL g[20]={1};
void solve(){
LL x;
cin>>x;
vector<LL> ans;
for(int i=1;i<=18;i++){
LL k=g[i]+1;
if(x%k==0) ans.emplace_back(x/k);
}
cout<<ans.size()<<endl;
sort(ans.begin(),ans.end());
for(auto i : ans){
cout<<i<<' ';
}
cout<<endl;
}
int main() {
for(int i=1;i<=18;i++) g[i]=10ll*g[i-1];
int t;
cin>>t;
while(t--) solve();
return 0;
}