题解:SP18273 SNGINT - Encode Integer
glass_goldfish · · 题解
本题很水。
首先,我们拿到了这个题目。我们发现,其实,这是一道来分解因数的题目(因为要让
所以,我们其实应该这么做:
首先,我们要创建一个数组,来保存每个数(
int a[10];
memset(a,0,sizeof(a));//数组置零
接着,我们来分解因数。
for(int i=9;i>=2;i--){//从大到小是因为如果从小到大,可能位数会多,例如8会变成3个2
while(n%i==0){//循环判断是否能除下
a[i]++;//对应的数出现的次数+1
n/=i;//
}
}
if(n>1)cout<<"-1";//如果n还有其他的因数,输出无解
else{
for(int i=2;i<=9;i++)//从2枚举到9,输出字典序最小的一个m
for(int j=1;j<=a[i];j++)//有a[i]个
cout<<i;//输出i
}
但是由于
if(n==1)cout<<n;//直接输出就好了
else if(n==0)cout<<"10";//正整数,我以前就被坑了
当然,不能忘记换行!
cout<<"\n";
好了,一道水题拿下!