c459 - 2. 自戀數
題目描述
題目要求判斷給定的整數 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");
}
}