题目地址: 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;
}