UVa 113

UVa 113

題目

http://domen111.github.io/UVa-Easy-Viewer/?113

給定兩個整數 $n$, $p$ ,求 $p$ 的 $n$ 次方根 $k$ ,且保證 $k$ 為整數

想法

$p$ 的 $n$ 次方根等同於 $p$ 的 $\frac{1}{n}$ 次方

直接使用內建的 pow 即可

有一點需要特別小心,因為 C++ 預設在輸出小數時如果太小,可能會變成以科學記號表示

要排除這種狀況,我們可以用之前學過的 setprecision 來解決

setprecision(n) 等同四捨五入取到小數點後第 $n$ 位,這裡我們要取整數,所以放 0

Code

1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double n,p;
int main(){
while(cin>>n>>p){
cout<<fixed<<setprecision(0)<<pow(p,1.0/n)<<'\n';
}
return 0;
}

時間複雜度分析

每筆測資時間複雜度可以視為 $O(1)$

不過詳細可以參考這篇: https://stackoverflow.com/questions/4638473/how-to-powreal-real-in-x86