# Math# Number Theory# Iteration

c459 - 2. 自戀數

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷給定的整數 N 在給定的進位制 b 下是否為自戀數。自戀數是指一個數字等於其各位數字的 d 次方之和,其中 d 是數字的位數。

解題思路

程式首先計算 b 的位數 j。然後,計算 N 的各位數字的 j 次方之和 bv。最後,將 N 的各位數字重新組合成一個新的數字 b,並將其與 bv 進行比較。如果兩者相等,則輸出 "YES",否則輸出 "NO"。

複雜度分析

  • 時間複雜度: O(d),其中 d 是數字的位數。因為程式需要迭代數字的每一位。
  • 空間複雜度: O(1),程式使用固定的額外空間,不隨輸入大小而變化。

程式碼

#include <stdio.h>
#include <cmath>
int main(){
	int a,b,bv,n,i,j;
	while(scanf("%d%d",&a,&b)>0){
		bv=0;n=b;
		for(j=0;n>0;j++)//j 位數 
			n/=10;n=b;	
		for(i=0;i<j;i++,b/=10)
			bv+=(b%10)*pow(a,i);		
		for(i=0;i<j;i++,n/=10)
			b+=pow(n%10,j);
		if(b==bv)
			printf("YES\n");
		else
			printf("NO\n");			
	}
}

Discussion