kata:
比如说:
dig_pow(89, 1) should return 1 since 8¹ + 9² = 89 = 89 * 1
dig_pow(92, 1) should return -1 since there is no k such as 9¹ + 2² equals 92 * k
dig_pow(695, 2) should return 2 since 6² + 9³ + 5⁴= 1390 = 695 * 2
dig_pow(46288, 3) should return 51 since 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
我的代码:
正常的使用while (n)循环来获得各位上的数。
别人的代码:
亮点在于用了数学方法 常用对数 来求位数;
注意不可以直接向上取整,而一定要向下取整再加一
int numdigits = ceil ( log10 (n) );(当n是10的次幂的时候会出错)
别人的代码2:
这个避免了使用循环来求各位上的数字,而是将其转存为字符串;
这里介绍一下sprintf函数:
该函数在stdio.h中
用于将数据格式化后存入字符数组中。
sprintf:存到字符数组
printf:发送到console
函数声明是:
int sprintf(char *str, const char *format, ...)
第一个参数是目标字符数组,第二个是格式说明,第三个是数据
注意中间的格式说明不一定单是说明符,
也可以是sprintf(str, "Pi 的值 = %f", M_PI);
最后用三目运算符代替if判断
- ‘0’ 可以认为是将字符0转成数字0,,实际是减去字符0的ascii码,因为没有字符型,都是int存储,表面形式无所谓