编写一个程序,对于给定的任意整数,如何计算并输出其位数以及每一位数字(不包括前导零)的总和?
时间: 2024-10-10 09:06:50 浏览: 29
C语言程序设计-计算并输出给定整数的所有因子之积(包括自身);规定这个整数的值不大于50;
5星 · 资源好评率100%
要编写一个程序来计算一个整数的位数以及每一位数字(去掉前导零)的总和,你可以使用以下步骤:
1. 首先,获取整数作为输入。这可以通过`scanf`或`fgets`函数完成。
2. 使用`strlen`函数计算整数的位数,这个函数返回字符串长度,对于整数来说就是有效字符数减去1(因为首位为0时也要计入位数)。
3. 然后,遍历每一位数字,去除前导零。可以通过`itoa`或者自定义转换函数实现。将每一位转换为整数并与当前总和相加。
4. 最后输出位数和每一位数字的总和。
下面是使用C语言编写的示例代码:
```c
#include <stdio.h>
#include <string.h>
// 自定义函数,去除前导零并转换成整数
int remove_leading_zeros(int num, char* str) {
int i = 0;
while (str[i] == '0') {
i++;
}
if (i > 0) {
return atoi(str + i); // 转换剩余部分为整数
} else {
return 0; // 如果全是0,则返回0
}
}
int main() {
int input_num, total_sum = 0, digit_count = 0;
char num_str[20]; // 用于存储整数字符串
printf("Enter an integer: ");
scanf("%d", &input_num);
// 将整数转换为字符串
itoa(input_num, num_str, 10);
// 计算位数和每一位数字的总和
for (digit_count = 0; num_str[digit_count] != '\0'; digit_count++) {
total_sum += remove_leading_zeros(input_num, num_str);
// 如果当前字符不是'0',则进入下一位
if (num_str[digit_count] != '0') {
break;
}
}
printf("The number has %d digits.\n", digit_count);
printf("The sum of each non-zero digit is: %d\n", total_sum);
return 0;
}
```
阅读全文