HDU 6182 [A Math Problem] 打表

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6182

题目大意:给一个n,问有多少正整数k满足k的k次幂<=n

关键思想:k^k增长速度巨快,k=16时就超过1e18了。所以打个表,判断所处位置就ok了。

代码如下:

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

typedef long long ll; 

ll ans[17];

ll pow(ll a,ll b){
    ll x=1;
    for(int i=0;i<b;i++){
        x*=a;
    }
    return x;
}

int main(){
    ll n;
    bool flag;
    for(ll i=1;i<=15;i++){
        ans[i]=pow(i,i);
    }
    while(~scanf("%lld",&n)){
        flag=false;
        for(int j=1;j<=15;j++){
            if(ans[j]>n){
                printf("%d\n",j-1);
                flag=true;
                break;
            }
        } 
        if(!flag)printf("15\n");
    }
    return 0; 
} 

 

posted @ 2017-09-01 14:15  哇咔咔咔  阅读(168)  评论(0编辑  收藏  举报