解题思路:简单的贪心,从最大9枚举到2,把最大的因子放在最低位,然后用大整数除法求出即可,注意0和1单独处理
源码:
#include <iostream>
#include <memory.h>
#include <cstring>
using namespace std;
char input[1001];
int a[1001];
int ans[1000010];
int len;
bool divid(int a[],int d)
{
int b[1001];
int w = 0;
for(int i=0;i<len;i++)
{
w += a[i];
b[i] = w/d;
w %= d;
w *= 10;
}
if(w)
return false;
int k = 0;
while(b[k]==0)
k++;
len = len - k;//除一次后的长度
for(int j=0;j<len;j++)
a[j] = b[k++];
return true;
}
int main()
{
while(cin>>input)
{
if(input[0]=='-')
break;
len = strlen(input);
if(len==1&&input[0]=='0')
{
cout<<"10"<<endl;
continue;
}
if(len==1&&input[0]=='1')
{
cout<<"11"<<endl;
continue;
}
for(int i=0;i<len;i++)
a[i] = input[i] - '0';
int count = 0;
for(int i=9;i>=2;i--)//贪心,从最大开始除
while(divid(a,i))
ans[count++] = i;
if(len>1)
{
cout<<"There is no such number."<<endl;
continue;
}
if(count==1)//因子是1和本身
{
ans[count++] = 1;
}
for(int i=count-1;i>=0;i--)
cout<<ans[i];
cout<<endl;
}
return 0;
}