面試題之金山_函數練習3_數值轉換並輸出數值中各個數位個數(從低位到高位,輸出轉換後數值的各個數字個數)

來源:互聯網
上載者:User
函數練習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);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.