c语言代码比较18bb/16

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存储,表面形式无所谓
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值