Đầu tiên, chúng tôi cung cấp một ví dụ để giải thích vấn đề. Sau đó, chúng tôi đã đưa ra ba cách tiếp cận khác nhau để giải quyết vấn đề này. Cuối cùng, chúng tôi đã xem qua các cách triển khai của chúng, với mỗi cách tiếp cận có độ phức tạp về thời gian tốt hơn cách trước
tác giả dưới cùng
Nếu bạn có một vài năm kinh nghiệm trong Khoa học máy tính hoặc nghiên cứu và bạn muốn chia sẻ kinh nghiệm đó với cộng đồng, hãy xem Nguyên tắc đóng góp của chúng tôi
- Viết chương trình trong C để tìm xem một số có phải là lũy thừa của hai hay không trên một dòng
- Cách tìm xem một số có phải là lũy thừa của hai hay không
- Bất kỳ số nào là lũy thừa của hai [hãy để nó là AND] chỉ có một bit được đặt trong biểu diễn nhị phân của nó.
Ví dụ. 4 = 100, 8 = 1000, 16 = 10000, 32 = 100000, v.v. - Nếu chúng ta trừ 1 từ bất kỳ lũy thừa nào của 2 số thì bit thiết lập sẽ không được đặt và tất cả các bit ở bên phải của bit được đặt ban đầu trở thành 1.
Ví dụ. 4-1 = 011, 8-1 = 0111, 16-1 = 01111, 32-1=011111 - Bây giờ, nếu theo chiều bit và[&] của N và N-1 trả về ] có nghĩa là N là lũy thừa của 2.
Ví dụ: 4 & 3 = 100 & 011 = 000
Chương trình C để kiểm tra xem một số có phải là lũy thừa của hai hay không bằng toán tử bitwise
#include #include int main[] { int num; printf["Enter an integer\n"]; scanf["%d", &num]; if[num && [[num & [num-1]] == 0]]{ printf["%d is power of 2", num]; } else { printf["%d is not a power of 2", num]; } return 0; }Đầu ra
Enter an integer 16 16 is power of 2
Enter an integer 15 16 is not a power of 2
Trong chương trình này, chúng ta sẽ đọc một số nguyên và kiểm tra xem số đó có phải là lũy thừa của hai [2] hay không. Ví dụ số 12 là lũy thừa của 2 vì nó là bội số của 2
Nguyên lý thực hiện chương trình này - Chia một số cho 2 cho đến khi số không bằng 1, nếu trong vòng lặp số dư không bằng 0 thì số không phải là lũy thừa của 2 ngược lại số là lũy thừa của 2
Kiểm tra sức mạnh của hai [2] bằng chương trình C
/*C program to check number is power or 2 or not.*/ #include int main[] { int num; int tempNum,flag; printf["Enter an integer number: "]; scanf["%d",&num]; tempNum=num; flag=0; /*check power of two*/ while[tempNum!=1] { if[tempNum%2!=0]{ flag=1; break; } tempNum=tempNum/2; } if[flag==0] printf["%d is a number that is the power of 2.",num]; else printf["%d is not the power of 2.",num]; return 0; }
Sử dụng chức năng xác định người dùng
/*C program to check number is power or 2 or not.*/ #include /*function definition*/ int isPowerOf2[int number] { while[number!=1] { if[number%2!=0] return 0; number=number/2; } return 1; } int main[] { int num; printf["Enter an integer number: "]; scanf["%d",&num]; if[isPowerOf2[num]] printf["%d is a number that is the power of 2.",num]; else printf["%d is not the power of 2.",num]; return 0; }
đầu ra
First Run: Enter an integer number: 32 32 is a number that is the power of 2. Second Run: Enter an integer number: 36 36 is not the power of 2.
Chương trình thao tác số C »
Chương trình C để tìm xem một không có phải là sức mạnh của hai
Cải thiện bài viết
Lưu bài viết
Thích bài viết
- Cập nhật lần cuối. 19 tháng 7 năm 2021
Cải thiện bài viết
Lưu bài viết
Cho một số nguyên dương, viết hàm tìm xem đó có phải là lũy thừa của 2 hay không.
Ví dụ.
Input : n = 4 Output : Yes 22 = 4 Input : n = 7 Output : No Input : n = 32 Output : Yes 25 = 32
1. Một phương pháp đơn giản cho việc này là chỉ cần lấy nhật ký của số trên cơ số 2 và nếu bạn nhận được một số nguyên thì số đó là lũy thừa của 2.
C
Enter an integer 16 16 is power of 228
Enter an integer 16 16 is power of 229
Enter an integer 16 16 is power of 230
Enter an integer 16 16 is power of 231
Enter an integer 16 16 is power of 232
Enter an integer 16 16 is power of 233
________ 70 ________ 71 ________ 72 ________ 73
No Yes4
No Yes5
No Yes6
No Yes7_______78
No Yes9
No Yes0
No Yes1
No Yes2
No Yes3
No Yes2
No Yes5
No Yes4
No Yes5
No Yes8
No Yes9
No Yes7
No Yes1
No Yes2
No Yes9
No Yes7
No Yes5
No Yes6
No Yes5
No Yes8
No Yes9
No Yes7
No Yes1
No Yes2
No Yes9
No Yes7
No Yes5
No Yes6
No Yes5
No Yes6
Enter an integer 16 16 is power of 2289
No Yes2
Enter an integer 16 16 is power of 2291
đầu ra.
No Yes
Thời gian phức tạp. O[log2n]
Không gian phụ trợ. Ô[1]
2. Một giải pháp khác là tiếp tục chia số cho hai, tôi. e, làm n = n/2 lặp đi lặp lại. Trong bất kỳ lần lặp nào, nếu n%2 trở thành khác 0 và n không phải là 1 thì n không phải là lũy thừa của 2. Nếu n trở thành 1 thì đó là lũy thừa của 2.
C
Enter an integer 16 16 is power of 231
Enter an integer 16 16 is power of 232
Enter an integer 16 16 is power of 233
________ 70 ________ 71 ________ 72 ________ 73
No Yes4
No Yes5
Enter an integer 16 16 is power of 2301
Enter an integer 16 16 is power of 2302
Enter an integer 16 16 is power of 2303
No Yes6
Enter an integer 16 16 is power of 2289
No Yes5
Enter an integer 16 16 is power of 2307
Enter an integer 16 16 is power of 2308
Enter an integer 16 16 is power of 2303
Enter an integer 16 16 is power of 2301
Enter an integer 16 16 is power of 2311
Enter an integer 16 16 is power of 2312
No Yes6
Enter an integer 16 16 is power of 2289
Enter an integer 16 16 is power of 2303
Enter an integer 16 16 is power of 2316
No Yes5
No Yes2
No Yes5
No Yes6
Enter an integer 16 16 is power of 2321
No Yes2
Enter an integer 16 16 is power of 2323
No Yes2
No Yes5
No Yes4
No Yes5
No Yes8
No Yes9
No Yes7
No Yes1
No Yes2
No Yes9
No Yes7
No Yes5
No Yes6
No Yes5
No Yes8
No Yes9
No Yes7
No Yes1
No Yes2
No Yes9
No Yes7
No Yes5
No Yes6
No Yes5
No Yes6
Enter an integer 16 16 is power of 2289
No Yes2
đầu ra.
No Yes
3. Tất cả lũy thừa của hai số chỉ có một bit được đặt. Vì vậy, đếm số không. của các bit đã đặt và nếu bạn nhận được 1 thì số đó là lũy thừa của 2. Vui lòng xem Đếm bit tập hợp trong một số nguyên để đếm bit tập hợp.
4. Nếu chúng ta trừ lũy thừa của 2 số cho 1 thì tất cả các bit không được đặt sau bit được đặt duy nhất sẽ trở thành được đặt; .
Ví dụ đối với 4 [ 100] và 16[10000], chúng ta nhận được kết quả sau khi trừ đi 1
3 –> 011
. Chúng ta có thể nói n là lũy thừa của 2 hay không dựa trên giá trị của n&[n-1]. Biểu thức n&[n-1] sẽ không hoạt động khi n bằng 0. Để xử lý trường hợp này, biểu thức của chúng ta sẽ trở thành n& [. n&[n-1]] [nhờ https. //www. chuyên viên máy tính. org/program-to-find-whether-a-no-is-power-of-two/Mohammad để thêm trường hợp này].
So, if a number n is a power of 2 then bitwise & of n and n-1 will be zero. We can say n is a power of 2 or not based on value of n&[n-1]. The expression n&[n-1] will not work when n is 0. To handle this case also, our expression will become n& [!n&[n-1]] [thanks to //www.geeksforgeeks.org/program-to-find-whether-a-no-is-power-of-two/Mohammad for adding this case].
Dưới đây là cách triển khai phương thức này.
C
Enter an integer 16 16 is power of 232
No Yes12
Enter an integer 16 16 is power of 233
________ 70 ________ 71 ________ 72 ________ 717
No Yes4
No Yes5
No Yes20
No Yes5
No Yes6
No Yes23
No Yes2
Enter an integer 16 16 is power of 2323
No Yes2
No Yes5
No Yes4
No Yes5
No Yes8
No Yes9
No Yes7
No Yes1
No Yes2
No Yes9
No Yes7
No Yes5
No Yes6
No Yes5
No Yes8
No Yes9
No Yes7
No Yes1
No Yes2
No Yes9
No Yes7
No Yes5
No Yes6
No Yes5
No Yes6
Enter an integer 16 16 is power of 2289
No Yes2
đầu ra.
No Yes
Vui lòng tham khảo toàn bộ bài viết về Chương trình để tìm hiểu xem một không có phải là lũy thừa của hai hay không để biết thêm chi tiết.
Ghi chú cá nhân của tôi arrow_drop_up
Tiết kiệm