将输入的大数除以9 无法整除再除以 8,7,6,..2,如果可以整除就将除数记录,将商作为除数继续除9,8,...,3,2. 最后如果商为1 证明可以除尽 将被除过的数从小到大输出即可
#include<cstdio>
#include<cstring>
#define mem(a) memset(a,0,sizeof (a))
using namespace std;
char s[1005], t[1005];
int bang[15], n;
bool div(int p)
{
int i, x= 0;
mem(t);
for(i = 1; i <= n; i++)
{
x = x*10 +s[i];//从最高位开始运算
t[i] = x/p;//模拟竖式除法
x %= p;
}
if(!x)//如果可以除尽 那么就将原来的数变更为商
{
for(x = 1; t[x] == 0; x++);x--;
n -= x;//如
for(i = 1; i <= n;i++)
s[i] = t[i+x];
return 1;
}
else return 0;
}
int main()
{
int i;
while(scanf("%s",s+1), s[1]!='-')
{
mem(bang);
if(!s[2])
{
printf("1%c\n",s[1]);
continue;
}
n = strlen(s+1);
for(i = 1;i <= n; i++) s[i] =s[i] -'0';
for(i = 9; i > 1; i--)
{
while(div(i))
{
bang[i]++;
}
}
if(n>1) printf("There is no such number.\n");//如果都不能整除
else
{
for(i = 2; i <= 9;i++)
while(bang[i]--) printf("%d",i);
printf("\n");
}
}
return 0;
}