序文
この質問は本当に良い質問です。
テキスト
分析
まず第一に、我々は、条件が満たされるべきものを変えるサブの数を考えます。
最高品質係数が超えることはできません。 中的。
その後、見つけます の変更の親最小数 から へ 打破します 、それを保存し、そして最終的に反出力。
なぜ?
-
へ 、親の変化の最小数を、私たちの最初の できるだけGeをそのビット数が少なく確実にします。
-
できるだけわずか桁の前提の下で、我々は可能な限り小さく数をしたいです、
#include <bits/stdc++.h>
using namespace std;
int x=9,a[1010],len,l=1;
vector<int>v;
int main(){
char ch=getchar();
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar())a[++len]=ch-'0';//读入
while(x>=2){
int y=0;
for(int i=1;i<=len;i++){
y=y*10+a[i];
y%=x;
}
if(y)x--;//如果不能整除
else{
v.push_back(x);//存入
for(int i=1;i<=len;i++){
y=y*10+a[i];
a[i]=y/x;y%=x;//除
}if(a[l]==0)l++;
}
}if(len!=l)puts("There is no such number!");
else for(int i=v.size()-1;i>=0;i--)cout<<v[i];//反着输出
return 0;
}
追伸
ご質問がある場合、あなたは、コメント欄でそれを書き留めので、この問題のより完全なソリューションことができます。