题目

读入正整数,统计它的位数

思路

if (n==0) return 1 位;否则 while (n) { n/=10; cnt++; }。负数可先取绝对值再数。

解题分析

反复 n/=10 直到为 0 计数;n==0 单独返回 1 位。负数可先取绝对值再数,按题目是否允许负数处理。

完整程序

#include <stdio.h>

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1) {
        return 1;
    }
    if (n == 0) {
        printf("1\n");
        return 0;
    }
    int cnt = 0;
    int x = n < 0 ? -n : n;
    while (x) {
        cnt++;
        x /= 10;
    }
    printf("%d\n", cnt);
    return 0;
}

运行示例

输入:

12345

输出:

5