1. 程式人生 > >c語言程式碼比較18bb/16

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)迴圈來獲得各位上的數。

別人的程式碼:
在這裡插入圖片描述

亮點在於用了數學方法 常用對數 來求位數;

雖然它或許可以直接用ceil向上取整

別人的程式碼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儲存,表面形式無所謂