【C語言】求一個數的二進位制中 1 的個數
求一個數的二進位制的1的個數
1,通過模除的方法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
int count = 0;
printf("請輸入一個數字:\n");
scanf("%d",&i);
while(i)
{
if(i%2==1)
{
count++;
}
i = i/2;
}
printf("這個數中1的個數為:%d個1\n",count);
}
2,但是這樣會有缺陷,如果輸入一個負數的話,對於符號為的控制就不是很好
將其單獨寫成一個函式,並且傳進去成unsigned int num,可以解決
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int count_one_bits(unsigned int num) { int count = 0; while(num) { if(num%2 == 1) { count++; } num = num/2; } return count; } int main() { int num = 11; int result = 0; result = count_one_bits(num); printf("這個數中的1的個數為:%d個1\n",result); return 0; }
3,由於一般的數的二進位制位都是32位,有可能不能完全的統計1的個數,用迴圈來解決
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int count_one_bits(unsigned int num) { int count = 0; int i = 0; for(i=1; i<32; i++) { if(num%2 == 1) { count++; } num = num/2; } return count; } int main() { int num = 0; int result = 0; printf("請輸入一個數:\n"); scanf("%d",&num); result = count_one_bits(num); printf("%d的二進位制數中1的個數為:%d個1\n",num,result); return 0; }
4,迴圈的次數是32次,這樣程式就有些慢,改用與的方法就可以很好地解決
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int num)
{
int count = 0;
while(num)
{
num = num&(num-1);
count++;
}
return count;
}
int main()
{
int num = 0;
int result = 0;
printf("請輸入一個數:\n");
scanf("%d",&num);
result = count_one_bits(num);
printf("%d的二進位制數中1的個數為:%d個1\n",num,result);
return 0;
}
相關推薦
【C語言】求一個數的二進位制位模式從左到右翻轉後對應的十進位制值。
用函式unsigned int reverse_bit(unsigned int value)實現想要的功能 value是我們想要求的值。 #include <stdio.h> #include <math.h> unsigned
【C語言】求一個數的二進位制中 1 的個數
求一個數的二進位制的1的個數 1,通過模除的方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int main() { int i = 0;
【C語言】求一千以內的素數 第一種方法
第一種方法:平常思維(人們第一印象會想到的) //什麼是素數? -- 除了1和本身之外不能被其他數整除的數 #include "stdio.h" int main(){ int n,j,f;//變數解釋:n為我們要判斷的數,j為要與n相除的數,f為標誌 0 表示不是素數
【c語言】將一個數的二進位制序列逆序,然後輸出逆序之後的二進位制序,所對應的數
<pre name="code" class="cpp">// 將一個數的二進位制序列逆序,然後輸出逆序之後的二進位制序,所對應的數 #include <stdio.h> // 從原數拿出最低位,放到mid中,mid左移,原數右移 int r
【C語言】推斷一個數是否為2的n次方
post data- popu scanf scan ng- 輸入 ont print //推斷一個數是否為2的n次方 #include <stdio.h> int is_two_n(int num) { if ((num&(num - 1))
【C語言】判斷一個數是不是迴文數
所謂迴文數,就是說一個數字從左邊讀和從右邊讀的結果是一模一樣的。 首先,我們來判斷一下一個數是否為迴文數: #define _CRT_SECURE_NO_WARNINGS 1 #include&
【C語言】求兩個數的最大公約數
思路: 輾轉相除法:以小的數除大數,所得的是整數,那這個數就是最大公約數,不然就用餘數來除剛才的除數,直到得到整數,這時作為除數的就是最大公約數。 #include<stdio.h>
【c語言】判斷一個數n能否同時被3和5整除
// 判斷一個數n能否同時被3和5整除 #include <stdio.h> int main() { int n; printf("請輸入一個整數:"); scanf("%d",&n); if( n % 3 == 0 &&
【C語言】判斷一個數的奇偶(位操作)
//判斷一個數的奇偶 #include <stdio.h> int is_signal(int num) { if (num & 1) return 1; else r
【C語言】判斷一個數是否為2的n次方
//判斷一個數是否為2的n次方 #include <stdio.h> int is_two_n(int num) { if ((num&(num - 1))) //去掉一個1
【C語言】求Fibonacci數列前40項(迴圈)
程式碼為: //求Fibonacci數列前40項 #include "stdio.h" int main(){ long int f1,f2,i; f1 = 1; f2 = 1; //賦初始值 for(i = 1;i<=20;i++){//迴圈20次,一次兩個,結
【C語言】求Fibonacci數列的前20項(陣列)
//求Fibonacci數列的前20項 #include "stdio.h" int main(){ int i,j; int f[20] = {1,1};//賦值數列前兩項
【C語言】求N的階乘
求N的階乘 //輸入一個數 n ,求n! #include "stdio.h" int main(){ int n,i; double l = 1; //提高精度 printf("Enter N:"); scanf("%d",&n); for(i = n; i
【C語言】使用異或運算子交換兩個數
異或交換兩個數: #include<stdio.h> #include<stdlib.h> int main() { int a, b; a = 10; b = 20; a= a^b; b =a^b; a =a^b; printf("%d\n%d\n", a
【C語言】求1-N的和(遞迴法)
遞迴公式: 條件:f(1) = 1 遞迴條件:f(n-1) + n 為了手機顯示方便(配圖): 程式碼為: //求1-N的和 #include "stdio.h" int f(int n) { //定義函式f 出口為n等於1,否則將n與f(n-1)相
【C語言】求階乘與階乘之和
中學我們都學習了階乘的求法,比如要求整數n的階乘,則n!=n×(n-1)×(n-2)×…×2×1。現在有兩個問題,要用C語言編寫程式求n的階乘,以及求1!+2!+3!…+n!,該如何解決呢? 問題1:求n的階乘。 實現思路: 問題中的n需要
【C語言】求數值的正數次方
//數值的正數次方 //實現函式double power(double base, int exponent),求base的exponent次方,不得使用庫函式,不需要考慮大數問題。 //注意:考慮非
【C語言】求100~200之間的素數
分析: 判斷一個正整數m是否為素數有多種方法。 方法1:讓m依次被2,3,…,m-1除,如果m不能被2~m-1中的任何一個整數整除,則m是素數。 方法2:讓m依次被2,3,…,m/2除,如果m不能被2~m/2中的任何一個整數整除,則m是
【C語言】編寫一個函式,實現兩個數的交換 詳細解答
今天在用函式寫兩數交換的時候發現有點小挫折,然後經過多次查詢驗證才發現是因為地址不對的緣故,我在此放出兩種交換的方法,先發錯誤的如下:#include <stdio.h> void swap(int a,int b) { int temp=a; a
【C語言】求序列2/1+3/2+5/3+8/5+13/8+........前20項和。
我們能直接從序列上觀察出規律:(1)首先每一項的分母都與其前一項的分子相等, (2)每一項的分子都等於其前一項的分子與分母和。知道了規律,我們就好辦事兒!#include <stdio.h> int main () { double i = 2.0,j =