#include <stdio.h>
int main() {
long long N;
int digits = 0;
// 读取用户输入
printf("请输入一个非负整数: ");
scanf("%lld", &N);
// 处理输入为0的特殊情况
if (N == 0) {
digits = 1;
} else {
// 使用循环计算位数
while (N > 0) {
N /= 10;
digits++;
}
}
// 输出位数
printf("这个整数是 %d 位数\n", digits);
return 0;
}
在C语言中,可以使用循环语句来计算一个非负整数N的位数。下面是一个示例程序,它读取一个非负整数N,然后输出该整数的位数。这个程序忽略整数前面的无意义的0。
```c
#include <stdio.h>
int main() {
long long N;
int digits = 0;
// 读取用户输入
printf("请输入一个非负整数: ");
scanf("%lld", &N);
// 处理输入为0的特殊情况
if (N == 0) {
digits = 1;
} else {
// 使用循环计算位数
while (N > 0) {
N /= 10;
digits++;
}
}
// 输出位数
printf("这个整数是 %d 位数\n", digits);
return 0;
}
```
### 程序说明:
1. **变量声明**:
- `long long N;`:用于存储用户输入的非负整数。
- `int digits = 0;`:用于存储计算出的整数位数。
2. **读取用户输入**:
- 使用 `scanf("%lld", &N);` 读取一个 `long long` 类型的非负整数。
3. **特殊情况处理**:
- 如果输入的数是0,直接将 `digits` 设置为1,因为0是1位数。
4. **循环计算位数**:
- 使用 `while (N > 0)` 循环,每次将 `N` 除以10,同时将 `digits` 加1,直到 `N` 变为0为止。这样每次循环就相当于去掉一个数字,从而计算出总的位数。
5. **输出结果**:
- 使用 `printf` 输出计算得到的位数。
这个程序确保即使输入包含前导0,也不会影响最终的位数计算,因为在读取输入后,前导0会自动被忽略。