e473 - 整數的位數
題目描述
題目要求計算一個整數 a 的 b 次方的位數,其中 a 和 b 的範圍分別為 a <= 100 和 b <= 65565。由於直接計算 a 的 b 次方可能會導致整數溢出,因此需要使用數學方法來估算位數。
解題思路
利用對數的性質來解決這個問題。一個正整數 n 的位數等於 floor(log10(n)) + 1。因此,a 的 b 次方的位數等於 floor(log10(a^b)) + 1。根據對數的性質,log10(a^b) = b * log10(a)。所以,我們可以先計算 b * log10(a),然後取其 floor 值,再加上 1,即可得到 a 的 b 次方的位數。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <stdio.h>
#include <cmath>
int main(){
int a,b;
while(scanf("%d%d",&a,&b)>0){
a=(log10(a)*b);
printf("%d\n",a+1);
}
}