面试题之金山_函数练习3_数值转换并输出数值中各个数字的个数(从低位到高位,输出转换后数值的各个数字个数)

函数练习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);
}

posted @ 2008-05-10 23:02  Arishuang  阅读(503)  评论(0编辑  收藏  举报