一道暴力题目
需要用高精度除法和膜
对原数从9到2分别除
要特判一下输入为一位数的情况
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
inline int read(){
int x=0,f=1,ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct BigInt{
int a[1005],len;
void init(){
memset(a,0,sizeof(a));len=0;
}
int& operator [](int x){
return a[x];
}
BigInt operator /(const int b)const{
BigInt c;c.init();
c.len=len;int ex=0;
for(int i=len-1;i>=0;i--){
ex=ex*10+a[i];
c[i]=ex/b;
ex%=b;
}
while(!c[c.len-1]&&len>1) c.len--;
// c.print();
return c;
}
int operator %(const int b)const{
int ex=0;
for(int i=len-1;i>=0;i--) ex=(ex*10+a[i])%b;
return ex;
}
void print(){
for(int i=len-1;i>=0;i--) printf("%d",a[i]);
puts("");
}
};
char s[1005];
int len;
BigInt a;
int ans[10];
int main(){
scanf("%s",s);
while(s[1]!='1'||s[0]!='-'){
int len=strlen(s);a.init();a.len=len;
memset(ans,0,sizeof(ans));
for(int i=0;i<len;i++) a[i]=s[len-i-1]-'0';
// puts("X");
// a.print();
if(a.len==1) printf("1%d\n",a[0]);
else{
for(int i=9;i>=2;i--)
while(a%i==0)
a=a/i,ans[i]++;
// puts("X");
if(a.len>1) puts("There is no such number.");
else{
for(int i=2;i<=9;i++)
for(int j=1;j<=ans[i];j++)
printf("%d",i);
puts("");
}
}
scanf("%s",s);
}
return 0;
}