简单的贪心和高精度运算,主要还是要读懂题。
#include"iostream" #include"stdio.h" #include"string" #include"string.h" #include"cmath" #define mx 5005 using namespace std; int cnt[15]; char num[mx]; char temp[mx]; bool div(int mod) { int i,j,k=0,pre=0,s; for(i=0;num[i]!=‘\0‘;i++) { s=pre*10+(num[i]-‘0‘); temp[k++]=(s/mod)+‘0‘; pre=s%mod; } temp[k]=‘\0‘;//一定要给字符串加上一个结束符,这个真的是非常重要的!!! if(pre==0) { if(temp[0]==‘0‘) strcpy(num,temp+1); else strcpy(num,temp); return true; } else return false; } int main() { int i,j,k; while(cin>>num,strcmp(num,"-1")!=0) { memset(cnt,0,sizeof(cnt)); if(strlen(num)==1) {cout<<"1"<<num<<endl;continue;} for(i=9;i>=2;i--) { while(div(i)) cnt[i]++; } if(strlen(num)!=1) cout<<"There is no such number."<<endl; else { for(i=2;i<=9;i++) { while(cnt[i]) {cout<<i;cnt[i]--;} } cout<<endl; } } return 0; }
时间: 2024-10-15 17:20:52