首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言不使用循環求整數位數:log10 數學函數 O(1) 計算

     編輯:程式設計疑難解答

原理

正整數 `n` 的十進制位數 = `floor(log10(n)) + 1`。
為避免 `n=10^k` 時浮點誤差,通用寫法:`(int)log10(n * 10)`。

代碼


#include <math.h>
#include <stdio.h>

int main() {
    int nums[] = {1, 9, 10, 11, 99, 123, 888, 10001};
    for (int i = 0; i < 8; ++i)
        printf("%d: %d digits\n", nums[i], (int)log10(nums[i] * 10));
    return 0;
}

輸出


1: 1 digits
9: 1 digits
10: 2 digits
11: 2 digits
99: 2 digits
123: 3 digits
888: 3 digits
10001: 5 digits

注意

  • `n <= 0` 需單獨處理(`log10` 定義域為正數)。
  • 嵌入式無浮點庫時,可用查表法或位運算近似(`32 - __builtin_clz(n)` 為二進制位數,換算十進制需乘 `log10(2)`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved