题解
输出位数
1 条题解
-
0
解题思路
求一个正整数有几位,可以用"不断除以 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