top1编程
← 返回题目
题解

输出位数

1 条题解

  • 0
    @ 2026-8-4 15:00:52

    解题思路

    求一个正整数有几位,可以用"不断除以 10"的办法:一个整数除以 10,就会把个位去掉。比如 789÷10=78,再÷10=7,再÷10=0。

    我们每除一次就说明少了一位,就记一次数(位数加 1),一直除到数变成 0 为止。数一共除了几次,原来就有几位。以 789 为例:789→78→7→0,除了 3 次,所以 789 是 3 位数,正好和样例输出一致。

    用 while 循环实现:只要 n 还大于 0,就 cnt++(位数加 1),然后 n=n/10(去掉个位)。题目保证 n 是正整数(1≤n≤100000),所以不会出现 n=0 导致循环不执行的情况。

    补充一个小知识:如果题目允许 n=0,那 0 应该算 1 位数,需要单独特判。但本题不用考虑。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;              // n:要判断位数的正整数
        cin >> n;           // 读入 n
        int cnt = 0;        // cnt:记录位数,先清成 0
        while (n > 0) {     // 只要 n 还没被除成 0,就继续
            cnt = cnt + 1;  // 位数加 1
            n = n / 10;     // 去掉 n 的个位(整除 10)
        }
        cout << cnt << endl; // 输出位数
        return 0;
    }
    

    复杂度分析

    n 每除以 10 就少一位,所以循环的次数正好等于 n 的位数 d。比如 3 位数就循环 3 次,时间复杂度是 O(d),其中 d 是 n 的位数。因为 n≤100000,最多 6 位,循环次数非常少。空间上只用 n、cnt 两个变量,空间复杂度 O(1)。

    • 1