hdu 1058 Humble Numbers 水题

来源:互联网 发布:程序员的自我修养图片 编辑:程序博客网 时间:2024/06/06 02:59

传送门http://acm.hdu.edu.cn/showproblem.php?pid=1058
不知道该怎么说的一道题, 暴力的复杂度比dp要低…..
//啊其实暴力复杂度多了一个log(n)
- 坑点…
111的序数词是111th…
大概已经是个英语废了/吐血

#include <stdio.h>#include <iostream>#include <algorithm>#include <string>using namespace std;string s;long long tmp, p7, p5, p3, p2, n, cnt, ans[10000];long long ppow(int a, int b) {    long long ret = 1;    for (int i = 0; i < b; ++i)        ret *= a;    return ret;}void init() {    for (int i = 0; ; ++i) {        tmp = 1;        p7 = ppow(7, i);        if (tmp * p7 > 3e9) break;        for(int j = 0; ; ++j) {            p5 = ppow(5, j);            if (tmp * p7 * p5 > 3e9) break;            for (int k = 0; ; ++k) {                p3 = ppow(3, k);                if (tmp * p7 * p5 * p3 > 3e9) break;                for (int t = 0; ; ++t) {                    p2 = ppow(2, t);                    if (tmp * p7 * p5 * p3 * p2 > 3e9) break;                    ans[cnt++] = tmp*p7*p5*p3*p2;                }            }        }    }    sort (ans, ans+cnt);    return ;}int main() {//  freopen("in.t", "r", stdin);//  freopen("out.t", "w",stdout);    init();    while (cin >> n && n) {        if (n % 10 == 1) s = "st";        else if (n % 10 == 2) s = "nd";        else if (n % 10 == 3) s = "rd";        else s = "th";        if (n%100 == 11 || n%100 == 12 || n%100 == 13) s = "th";        cout << "The " << n << s << " humble number is " << ans[n-1] << "." << endl;    }    return 0;}

2017-09-08