我试图得到任意两个值的所有倍数的总和。
我使用scanf
向用户请求两次整数值。
在我创建的代码和算法中按预期工作,除非用户输入0和/或1的值。
我希望计算机能够接受零值并导致总计为零,当接受1时总和为1但0给我奇怪的崩溃而1给我一个很大的值。
/*multiples of 3 or 5: 3,5,6,9; sum is 23*/
#include <stdio.h>
int main()
{
int value,value2,limit = 1000;
int i,divi,sum = 0;
/*read user input for the first value*/
scanf("%d",&value);
/*get sum of all multiples of value*/
for(i = value;i < limit;){
sum = sum + i;
i = i + value;
}
printf("%d\n",sum);
printf("done for %d\n",value);
/*read user input for the second value*/
scanf("%d",&value2);
/*get sum of all multiples of value2*/
for(i = value2;i < limit;){
divi = i%value;
if((divi)==0){
i = i + value2;
}
else
{
sum = sum + i;
i = i + value2;
}
}
printf("%d\n",sum);
printf("done for %d\n",value2);
return 0;
}
答案 0 :(得分:1)
for
循环主要用于计算内容。你不需要,但它更具可读性。我稍后会谈到的。
对于你的第一个循环,你有:
for(i = value;i < limit;){
sum = sum + i;
i = i + value;
}
此...
i
的初始值设置为value
。这是......有点不正统,可能会让你感到困惑。i
测试limit
。sum
增加i
{。}}。i
增加value
的值。您看到的问题是,当value
为零时,i
永远不会更改。
还有一个奇怪的是sum
似乎没有得到倍数。如果value
为1
,则sum
将为0,1,3,6,10,15 ......三角形数字。这听起来不像你想要的那样。
相反,我认为您希望使用for
循环来计算其意图,并重复增加sum
。类似的东西:
for(i = 0;i < limit;i++){
sum = sum + value;
}
即将value
添加到sum
,limit
次。
如果您确实需要三角形数字,则可能需要引入补充变量。如果计数不是你想要的,你可能想要一个while
循环,为了便于阅读,可能需要:
while (sum < limit){
sum = sum + value; /* or whatever you need, here */
}
但绝对测试输入value
以确保它不是0
。无论你添加多少个零,它们都不会大于limit
......好吧,除非limit
是否定的。