e545 - 10019 - Funny Encryption Method
題目描述
題目要求讀入一個十進制整數 N,然後計算兩個值 b1 和 b2。b1 是 N 的二進制表示中 1 的個數,b2 是 N 的十六進制表示轉換為二進制後 1 的個數。最後輸出 b1 和 b2,以空格分隔。
解題思路
解題思路主要分為以下幾個步驟:
- 將輸入的十進制數 N 轉換為二進制字符串,並計算其中 1 的個數,得到 b1。
- 將輸入的十進制數 N 視為十六進制數,轉換為二進制字符串,並計算其中 1 的個數,得到 b2。
- 輸出 b1 和 b2,以空格分隔。
程式碼中,使用位運算 a % 2 和 a >>= 1 來計算十進制數轉換為二進制後的 1 的個數。對於十六進制轉換為二進制,先將十六進制數轉換為十進制數,再將十進制數轉換為二進制數,然後計算 1 的個數。
複雜度分析
- 時間複雜度: O(log N)
- 空間複雜度: O(1)
程式碼
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
while(scanf("%d",&a)>0){
int b1=0,b2=0,c=a,d=0,n=1;
while(a>0){
if(a%2){
b1++;
}
a>>=1;
}
while(c>0){
d+=c%10*n;
c/=10;
n*=16;
}
while(d>0){
if(d%2){
b2++;
}
d>>=1;
}
printf("%d %d\n",b1,b2);
}
}