繁体   English   中英

构造一个循环以检查数字的位数和是否可被3整除

[英]Constructing a loop to check if the sum of digits of a number is divisible by 3

我需要编写一个程序,其中在给定的数字范围之间,该程序需要查找其数字总和可以被3整除的数字。之后,它需要检查总和是否大于0,以及是否可以将其整除。 4,并打印满足上述条件的数字。 这是我尝试的:

include <stdio.h>
int main()
{
int a, b, sum, c, i, total, d;
scanf("%d %d", &a, &b);
for (i=a; i<b; i++)
{
  sum = 0;
  c = i;
  while (c != 0)
  {
   d=c%10;
    if ((d%10)%3 == 0)
    {
      sum = sum + d;
    }
      c = c /10;
    if (sum%4==0 && sum>0)
    {
      printf("%d\n", i);
      total++;
    }
   }
  }
  printf("%d", total);
 return 0;
}

我得到一个错误的输出,但我找不到错误。 有任何想法吗?

它应该分为两部分:

int DigitSum(int num)
{
    int sum = 0;
    while(num){
       sum += num%10;
       num/=10;
    }
    return sum;
}

遵循DRY原则。 不要重复自己。 如果这样做,可以确保您没有重用的机会。

将独立的可重用逻辑与核心功能分开,这对您进入大型项目很有用。

现在您进入逻辑:

for(int i=a;i<=b;i++)
{
     int digSum = DigitSum(i);
     if( digSum > 0 && digSum%3 == 0 && digSum%4 == 0 ){
         printf("%d\n", i); 
         total++;
     }
}
printf("%d",total);

你哪里出问题了?

  • 如果数字d不能被3整除,则您未考虑错误的sum

  • 对于6666这样的数字,当您增加total时将有2次,这也是错误的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM