一道暴力题目
需要用高精度除法和膜
对原数从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; }