加法持久化和加法根程序输入数字无响应
Additive Persistence and Additive Root Program Not Responding After Inputting Number
我有一个 C 语言初学者的家庭作业 class:
加法持久性是整数数字总和的属性。找到数字的和,然后对和进行数字求和,重复直到达到单个整数数字。此类循环的数量是该整数的附加持久性。考虑
以下示例:
● 起始整数为1234
● 其数字之和为1+2+3+4 = 10
● 整数现在是10
● 其各位数字之和为1 + 0 = 1
● 整数为1,当数值达到个位数时,我们就完成了。这个最后的整数是加法根
循环次数是加法持久化。整数 1234 的附加持久性为 2(第一个和为 10,然后第二个和为 1)。到达的最后一位称为整数的加法数字根。 1234 的加法数字根是 1。
编写一个程序:
● 要求用户输入一个正整数。
● 如果给定的整数是个位数,则将其加法持久性和乘法持久性报告为0,将其加法根报告为自身。
● 如果整数小于0,则表示退出程序。
● 否则,求给定整数的加法持久性和加法根,并将结果报告给用户
● 提示用户继续,直到他们退出
这是我想出的代码:
#include <stdio.h>
int main()
{
int num;
int pers = 0;
int res = 0;
int sig = 0;
int sum = 0;
int sum1 = 0;
for (sig = 0;sig >= 0;) {
printf("Please enter a positive integer to find the additive persistence, and the integer's additive digital root: ");
scanf_s("%d", &num);
if (num < 0) {
sig--;
break;
}
res = num;
sum = 0;
while((res>0)){
sum = sum + (res % 10);
res = num / 10;
if (res == 0) {
if (sum >= 10) {
res = sum;
sum = 0;
}
if (sum < 10)
pers++;
}
}
printf("\nThe additive persistence is %d and the additive root is %d\n", pers, sum);
}
return 0;
}
每当我(成功)编译和 运行 代码时,在 scanf 语句之后程序什么都不做。为什么会这样?对于成功完成这项任务有什么建议吗?
非常感谢您的帮助
考虑这一行:
res = num / 10;
在第一个 运行 循环之后 res
的值是多少?在第二个 运行 之后?如果你在那里放一个 print 来调试你的程序,你会看到 res
总是有相同的值并且不会改变。这是一个无限循环,可能会一直持续到 sum
溢出时出现未定义的行为。你可能想要这个:
res = res / 10;
我有一个 C 语言初学者的家庭作业 class:
加法持久性是整数数字总和的属性。找到数字的和,然后对和进行数字求和,重复直到达到单个整数数字。此类循环的数量是该整数的附加持久性。考虑 以下示例:
● 起始整数为1234
● 其数字之和为1+2+3+4 = 10
● 整数现在是10
● 其各位数字之和为1 + 0 = 1
● 整数为1,当数值达到个位数时,我们就完成了。这个最后的整数是加法根
循环次数是加法持久化。整数 1234 的附加持久性为 2(第一个和为 10,然后第二个和为 1)。到达的最后一位称为整数的加法数字根。 1234 的加法数字根是 1。 编写一个程序:
● 要求用户输入一个正整数。
● 如果给定的整数是个位数,则将其加法持久性和乘法持久性报告为0,将其加法根报告为自身。
● 如果整数小于0,则表示退出程序。
● 否则,求给定整数的加法持久性和加法根,并将结果报告给用户
● 提示用户继续,直到他们退出
这是我想出的代码:
#include <stdio.h>
int main()
{
int num;
int pers = 0;
int res = 0;
int sig = 0;
int sum = 0;
int sum1 = 0;
for (sig = 0;sig >= 0;) {
printf("Please enter a positive integer to find the additive persistence, and the integer's additive digital root: ");
scanf_s("%d", &num);
if (num < 0) {
sig--;
break;
}
res = num;
sum = 0;
while((res>0)){
sum = sum + (res % 10);
res = num / 10;
if (res == 0) {
if (sum >= 10) {
res = sum;
sum = 0;
}
if (sum < 10)
pers++;
}
}
printf("\nThe additive persistence is %d and the additive root is %d\n", pers, sum);
}
return 0;
}
每当我(成功)编译和 运行 代码时,在 scanf 语句之后程序什么都不做。为什么会这样?对于成功完成这项任务有什么建议吗? 非常感谢您的帮助
考虑这一行:
res = num / 10;
在第一个 运行 循环之后 res
的值是多少?在第二个 运行 之后?如果你在那里放一个 print 来调试你的程序,你会看到 res
总是有相同的值并且不会改变。这是一个无限循环,可能会一直持续到 sum
溢出时出现未定义的行为。你可能想要这个:
res = res / 10;