e284 - 放暑假了!!!!!
題目描述
題目要求判斷輸入的整數是否為 2 的乘冪。如果是,輸出 "Yes",否則輸出 "No"。
解題思路
程式碼預先計算了 2 的 0 到 31 次方,並將其儲存在 a 陣列中。對於每個輸入的數字 b,程式碼迭代 a 陣列,檢查 b 是否等於 a 陣列中的任何一個元素。如果找到相等的元素,則輸出 "Yes" 並結束迭代。如果 b 大於 a 陣列中的所有元素,則輸出 "No"。
複雜度分析
- 時間複雜度: O(32) = O(1)。因為陣列大小固定為 32,所以迭代次數是常數。
- 空間複雜度: O(32) = O(1)。程式碼使用了一個大小為 32 的陣列來儲存 2 的乘冪,空間使用是常數。
程式碼
#include <stdio.h>
int main(){
long long int a[32],b=1,i=0;
for(i=0;i<32;i++,b*=2)
a[i]=b;
while(scanf("%lld",&b)>0){
for(i=0;i<32;i++){
if(a[i]>b){
printf("No\n");
break;
}
else if(a[i]==b){
printf("Yes\n");
break;
}
}
}
}