html京東頁面制作深圳seo優(yōu)化排名優(yōu)化
1.問題描述:給定一個整數(shù),統(tǒng)計其對應(yīng)的二進(jìn)制中含有1的個數(shù)。比如8(0000 1000),對應(yīng)的二進(jìn)制數(shù)中,只含有一個1.
2.設(shè)計思路:對x取余:z=x%2。如果z!=0,說明x的末尾不是為1.對于一個二進(jìn)制x4x3x2x1進(jìn)行分析,x1代表了1,x2代表了2,x3代表了4,x4代表了8。所以,可以將x循環(huán)往右移動(x=x>>1),如果x對應(yīng)的二進(jìn)制數(shù)中含有1,它一定會被移動到最低位上(x1)。那么此時,x所表示的數(shù)一定為奇數(shù)(x4x3x2x1中,只有x1為1,時所表示的數(shù)才為奇數(shù))。當(dāng)x為奇數(shù)時,x%2的結(jié)果為1。重復(fù)上述過程,直到x為0,便可以統(tǒng)計出x中含有1的個數(shù)。
3.代碼:
#include <stdio.h>
/*統(tǒng)計一個十進(jìn)制整數(shù),對應(yīng)的二進(jìn)制數(shù)中含有1的個數(shù)*/int count(int x)
{int con = 0;while(x){if(x%2 != 0) //當(dāng)x%2不等于0時,表示此時,x對應(yīng)的二進(jìn)制數(shù)的最低位上存在一個1 {con++;}x = x >> 1; //往右移移位,即x = x / 2 }return con;} int main()
{int ans;int a;printf("輸入一個整數(shù):\n");scanf("%d",&a);ans = count(a);printf("含有1的個數(shù)為:%d\n",ans);return 0;
}
4.運行結(jié)果:
5.總結(jié):
統(tǒng)計一個整數(shù)對應(yīng)的二進(jìn)制數(shù)中含有多少個1,可以將整數(shù)x轉(zhuǎn)換成二進(jìn)制來分析。當(dāng)二進(jìn)制數(shù)的最低位為1時,x%2的結(jié)果一定為1。然后將x往右移動一位(x = x >> 1)。重復(fù)上述過程,直到x為0時,結(jié)束循環(huán),便可以得到x中含有多少個1。