| 函數練習3 |
寫一個函數,對給定整數的二進位表示進行描述 如:給定整數131,其二進位表示為10000011,要求函數輸出以下結果: 1: 2 0: 5 1: 1 表示從最低位開始,包含2個1,5個0,1個1。 參考上一題,確定本函數的名字,入口出口及傳回值,並實現本函數 |
*解題思路:數制轉換是(N/d)*d+N%d 而此題是要我們從低位開始的.又因平常的手寫十進位轉換二進位也是得到低位到高位的.
*利用上述的特性,我們只要比較新得出的低位元值是否與將要計算的高一位的數值相等,若等,則加一,不等則就輸出這個數值
*有多少個,並清理計數器.具體代碼最下面:
編程總結:
從這道題中,我又學到了數制轉換方面的知識,但還暴露出很多問題。如剛開始自己可以得出轉換後從低到高的數值,但
卻寫不出此題的結果代碼。後又經參考別人的代碼之後,自己終於做出來了。最大的收穫還是在做什麼事情,就要先好好的,仔細的瞭解、明白和清楚究竟是做什麼。這次一開始就對題目研究得不是很透徹,導致了自己只能做到一半,最後要參考別人的代碼(其實別人的代碼也不是很正確)。好了,吸取教訓啊。張大兩隻眼睛,還是看不清的話,就再加兩隻(即一副眼鏡唄)。
#include <stdio.h>
void ParseInt(int pint)
{
int sum=1; //相同數值個數計數器
int tempa,tempb; //tempa放低位,tempb放高一位
while(pint)
{
tempa=pint%2; //得到十進位轉二進位的低位元值
pint=pint/2;
tempb=pint%2; //得到下一個將要得出的高一位元值
if(tempa==tempb) //低位與高一位元值相比,若相等則計數器加一
{
sum++;
}
else //兩者不相等,則輸出並清理計數器
{
printf("%d:%d\n",tempa,sum);
sum=1;
}
}
}
int main()
{
int Snum=131;
ParseInt(Snum);
scanf("%d",Snum);
}