目前主要分为三个专栏,后续还会添加:
感谢阅读!
初来乍到,如有错误请指出,感谢!
描述
求一个整数的所有数位之和
输入描述:
输入一行,包含一个整数。
输出描述:
一个整数. int范围内
解题思路 :
用数组的形式把用户输入的数字存起来
然后遍历数组,将数组的每一位都加起来
存在sum里面
这是一开始想的,后来发现想多了,想复杂了,用去模运算就行了......
理解问题:题目要求输入一个整数,并计算出这个整数所有数位上的数字之和。
确定方法:为了得到一个整数的数位之和,我们需要将这个整数分解成各个数位上的数字,然后将它们相加。
分解整数:有几种方法可以分解整数:
数学方法:通过取模操作(%
)和整除操作(/
)来逐步分解整数。
字符串转换:将整数转换为字符串,然后遍历字符串中的每个字符。
数学方法详解:
使用取模操作%
可以得到整数的最低位数字。
使用整除操作/
可以去掉整数的最低位数字,得到剩余的整数部分。
字符串转换方法详解:
将整数转换为字符串,这样就可以直接访问每一位数字。
遍历字符串中的每个字符,将字符转换为对应的数字并累加。
实现逻辑:
初始化一个变量来存储数位之和,通常初始化为0。
根据选择的方法(数学方法或字符串转换方法)来分解整数并计算数位之和。
在分解过程中,不断更新数位之和的值。
边界条件考虑:
确保处理了所有可能的输入情况,包括正数、负数和0。
输出结果:
完成数位之和的计算后,输出最终的结果。
代码 1 :
/* 包含标准输入输出库 */
# include <stdio.h>
/* 包含字符串处理库 */
# include <string.h>
int main() /* 主函数的开始 */
{
/* 创建一个大小为10的字符数组,并初始化所有元素为0 */
char arr[10] = {0};
/* 使用scanf函数读取一个字符串,存储到arr数组中 */
scanf("%s", arr);
/* 初始化长度变量和数位之和变量 */
int length = 0, sum = 0;
/* 计算输入字符串的长度 */
length = strlen(arr);
/* 遍历字符串数组中的每个字符 */
for (int a = 0; a < length; a++)
{
/* 将字符转换为对应的整数值,并加到sum变量上 */
sum += arr[a] - '0';
}
/* 打印出数位之和 */
printf("%d", sum);
/* 主函数返回0,表示程序正常结束 */
return 0;
}
代码 2 :
int main() /* 主函数的开始 */
{
int a = 0; /* 定义一个整型变量a并初始化为0,用于存储用户输入的整数 */
int b = 0; /* 定义一个整型变量b并初始化为0,用于存储每次取模操作的结果 */
int c = 0; /* 定义一个整型变量c并初始化为0,用于累加数位之和 */
scanf("%d", &a); /* 从标准输入读取一个整数值到变量a */
for (; a != 0;) /* 开始一个无限循环,条件是a不等于0 */
{
b = a % 10; /* 使用取模操作符%得到a的最低位数字,赋值给b */
a /= 10; /* 将a除以10并取整,即去掉a的最低位数字 */
c += b; /* 将b的值累加到c上 */
}
printf("%d\n", c); /* 打印出数位之和c,并换行 */
return 0; /* 主函数返回0,表示程序正常结束 */
}
这段代码通过一个无限循环,不断地使用取模操作得到整数的最低位数字,然后通过整除操作去除这个最低位数字,直到整数变为0。
在这个过程中,将每次得到的最低位数字累加到变量c
中。最后,输出累加的结果c
,即整数的所有数位之和。
代码 3 :
#include <stdio.h> /* 引入标准输入输出库,用于程序中的输入输出操作 */
int main() { /* 主函数的开始 */
int num = 0; /* 定义一个整型变量num并初始化为0,用于存储每次读取的数字 */
int sum = 0; /* 定义一个整型变量sum并初始化为0,用于累加读取到的所有数字 */
/* 使用while循环进行持续读取,条件是读取操作不返回文件结束标志EOF */
while (scanf("%1d", &num) != EOF) {
sum += num; /* 将读取到的数字num加到累加器sum上 */
}
printf("%d", sum); /* 打印出累加器sum的值,即所有读取数字的总和 */
return 0; /* 主函数返回0,表示程序正常结束 */
}
这段代码的目的是从标准输入读取一系列数字,并将它们累加起来。
它使用了scanf
函数来读取数字,并且指定了格式%1d
,这意味着每次读取时只读取一个数字。
while
循环会一直执行,直到scanf
函数返回EOF
(文件结束标志),这通常意味着输入流已经结束。累加的结果存储在变量sum
中,最后通过printf
函数输出。
代码 4 :
#include <stdio.h> /* 引入标准输入输出库,用于程序中的输入输出操作 */
int main(void) /* 主函数的开始,使用void表示不需要参数 */
{
int n, i = 0, j, sum = 0; /* 声明整型变量n用于存储输入的数字,i作为数组索引,j用于for循环,sum用于存储数位之和 */
int a[10]; /* 声明一个大小为10的整型数组a,用于存储分解的数位 */
scanf("%d", &n); /* 从标准输入读取一个整数值到变量n */
/* 使用while循环分解n,直到n小于10,即n只剩下一位数字 */
while (n / 10 != 0)
{
a[i] = n % 10; /* 将n的最低位数字存储到数组a的第i个位置 */
n = n / 10; /* 将n除以10,去掉最低位 */
i++; /* 索引i递增 */
}
/* 使用for循环累加数组a中存储的数位到sum */
for (j = 0; j < i; j++)
{
sum = sum + a[j]; /* 将数组a的第j个元素加到sum上 */
}
sum = sum + n; /* 将n的当前值(此时为最后一位数字)加到sum上 */
printf("%d", sum); /* 打印出数位之和sum */
return 0; /* 主函数返回0,表示程序正常结束 */
}
这段代码的目的是读取一个整数,然后计算这个整数各个数位上的数字之和。
它首先使用scanf
从标准输入读取一个整数,然后通过while
循环将这个整数分解成单个的数位,并将它们存储到数组a
中。
随后,使用for
循环累加数组中的数位到变量sum
。
最后,将剩余的数字(如果存在)加到sum
中,并打印出结果。
知识点 :
输入输出操作:使用 scanf
函数从标准输入读取数据,使用 printf
函数向标准输出打印结果。
循环控制:使用 while
循环和 for
循环来重复执行代码块,直到满足特定条件。
数组的使用:创建和使用数组来存储和操作数据。在本题中,数组用于存储整数的各个数位。
整数的数学操作:
使用取模操作符 %
来获取一个整数的最低位数字。
使用整除操作 /
来移除整数的最低位数字。
变量的作用域和生命周期:理解在 main
函数中声明的变量在整个函数的执行过程中是可见和可用的。
条件判断:使用条件表达式 n / 10 != 0
来控制循环的执行,直到整数 n
只剩下个位数。
算术运算:执行加法和除法运算来分解和计算整数的数位之和。
数组索引:使用索引来访问数组中的元素,如 a[i]
表示访问数组 a
的第 i
个元素。
程序逻辑:设计算法逻辑来分解整数、存储数位、计算数位之和,并处理最后的输出。
代码结构:理解并实现程序的结构,包括初始化变量、执行循环、条件判断和输出结果。
整数除法的截断行为:在 C 语言中,整除操作会截断结果,即只保留整数部分。
函数的返回值:使用 return
语句从 main
函数返回一个值,通常用于表示程序的退出状态。