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; }

浙公网安备 33010602011771号