题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2964
代码如下:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <set> #include <map> #include <queue> using namespace std; /* freopen("input.txt", "r", stdin); //读数据 freopen("output.txt", "w", stdout); //注释掉此句则输出到控制台 */ int prime[]={1,2,3,5,7,11,13,17,19,23,29,31,37}; __int64 a[21]; int b[21]; int main() { int i,j,n,k,t; a[1]=1; for(i=2;i<13;i++) a[i]=a[i-1]*prime[i-1]; while(cin>>n,n) { printf("%d = ",n); i=1; while(a[i]<=n)//这个地方要小于等于,不然就WA了 i++; k=--i;t=n; memset(b,0,sizeof(b)); for(;i>=1;i--) { b[i]=t/a[i];//求b t%=a[i]; } for(i=1;i<=k;i++)//输出 if(b[i]!=0) { printf("%d",b[i]); for(j=1;j<i;j++) printf("*%d",prime[j]); if(i!=k) printf(" + "); } cout<<endl; } return 520; }