NYOJ 633 幂

时间限制:3000 ms  |           内存限制:65535 KB
难度:4
描述
在学习循环的时候,我们都练习过利用循环计算a的k次方。现在给定整数k和一个整数m,请你求出对应的整数a,使得a的k次方是不超过m并且最接近m的数值。
输入
一个整数T表示测试组数。 对于每组测试数据: 给定两个整数k和m
数据范围: 1 <= T <= 20 1 <= k <= 10^9 0 <= a <= 10^9 0 <= M <= 10^100
输出
对于每组数据,输出一个整数a占一行。
样例输入
2
2 4
3 27 
样例输出
2
3 
#include<iostream>
#include<cmath>
using namespace std;

int main()
{
    double k,m,t;
    cin>>t;
    while(t--)
    {
        cin>>k>>m;
        int a = pow(10.0,double(log10(m)/k));
        while(pow(a+1,k) <= m)    ++a;
        cout<<a<<endl;
    }
    return 0;
}        

初看这道题是大数,无从下手,但仔细一考虑便会发现,对其先求对数,问题就变得简单了,然后化简便可以求出a的大概值,然后再把a的值逐渐变大,便可以求出a了!

原文地址:https://www.cnblogs.com/yaling/p/3082463.html