不会C语言。给出几个算法,代码是fortran的,供参考。
第一种,用整数除法。对于整数a,连续用10除,直到商为零。除法的次数,即为位数。
这个算法对于正负整数和零都能获得正确的结果。
第二种,用对数函数直接计算。对a取绝对值,再计算10为底的对数,所得结果取整数部分,再加1,即为位数。由于log10函数的变量不能是整数,需要a*1.0转换为实数。又由于log10的变量不能是0,因此针对a=0的情形,通过max将其转换成1.0。
第三种,逐个数数字的个数。将a取绝对值,写入字符串,统计字符串中不为空(为数字)的字节数,即为位数。