HDOJ 1058

将一个数拆分成若干个质数的乘积,没什么难度。

我的代码中,需要计算x的y次方,之前用math.h中的pow(x,y)来计算,一直通不过,很奇怪。

后来自己写了一个计算幂的函数,就过了。

我感觉是数字类型不匹配。我的代码中用的几乎都是__int64类型,而pow函数返回的是double类型。

#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;

const __int64 LEN = 5842;
const __int64 MAX = 2000000000;

int cmp(__int64 a,__int64 b)
{
    return a < b;
}

__int64 getFactorial(__int64 base,__int64 exponent)
{
    __int64 result = 1;
    for (int i = 1;i <= exponent;i ++)
    {
        result *= base;
    }
    return result;
}

int main ()
{
    __int64 ans[LEN + 1];
    int primes[5] = {1,2,3,5,7};
    int len = 1,pos;
    ans[1] = 1;
    for (int i = 1;i <= 4;i ++)// 四个primes 
    {
        pos = len + 1;// 新的数在ans中的下标
        for (int j = 1;j <= len;j ++)// 对之前的所有数做乘法
        {
            for (int k = 1; ;k ++)// 乘以primes[i]的阶乘
            {
                __int64 temp = ans[j] * getFactorial(primes[i] , k);
                if (temp > MAX)
                    break;
                ans[pos] = temp;
                pos ++;
            }
        }
        len = pos - 1;
        if (len > LEN)
            break;
    }
    sort(ans + 1,ans + len + 1,cmp);
    int input;
    while(scanf("%d",&input)==1 && input)
    {
        if (input % 10 == 1 && input % 100 != 11)
            printf("The %dst humble number is %d.\n",input,ans[input]);
        else if (input % 10 == 2 && input % 100 != 12)
            printf("The %dnd humble number is %d.\n",input,ans[input]);
        else if (input % 10 == 3 && input % 100 != 13)
            printf("The %drd humble number is %d.\n",input,ans[input]);
        else
            printf("The %dth humble number is %d.\n",input,ans[input]);
    }
    return 0;
}
posted @ 2012-08-10 20:05  peaceful  阅读(131)  评论(0)    收藏  举报