# Math# Logarithm# Number Theory

e473 - 整數的位數

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算一個整數 ab 次方的位數,其中 ab 的範圍分別為 a <= 100b <= 65565。由於直接計算 ab 次方可能會導致整數溢出,因此需要使用數學方法來估算位數。

解題思路

利用對數的性質來解決這個問題。一個正整數 n 的位數等於 floor(log10(n)) + 1。因此,ab 次方的位數等於 floor(log10(a^b)) + 1。根據對數的性質,log10(a^b) = b * log10(a)。所以,我們可以先計算 b * log10(a),然後取其 floor 值,再加上 1,即可得到 ab 次方的位數。

複雜度分析

  • 時間複雜度: 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);
	}
}

Discussion