【问题标题】:Sum of all integers that are both divisible by 4 and 6 between the first and second number第一个数和第二个数之间能被 4 和 6 整除的所有整数的总和
【发布时间】:2019-04-09 10:18:25
【问题描述】:

我需要编写一个程序来获取 2 个整数。然后程序将显示两个数字之间所有能被 4 和 6 整除的整数的总和

我试着做下面的代码:

#include <iostream>
using namespace std;

int main()
{
    int num1, num2, sum=0;

    cout << "Input first number : ";
    cin >> num1;
    cout << "Input second number : ";
    cin >> num2;


    for(int i = num1 + 1;i<num2;i++)
    {
        if ( num1 % 4 == 0 && num2 % 6 == 0)
        {
            sum = sum + i;
        }
    }
    cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
    system("pause");
    return 0;
}

我的预期结果应该是

输入第一个数字:4
输入第二个数字:12
在 4 和 12 之间能被 4 和 6 整除的所有整数之和为 12 “因为 12 是唯一能被 4 和 6 整除的数”

但实际结果是
输入第一个数字:4
输入第二个数字:12
在 4 到 12 之间能被 4 和 6 整除的所有整数之和为 56

【问题讨论】:

  • 认为您的意思是检查 i 是否可被 4 和 6 整除,而您目前正在检查 num1num2 是否分别。此外,如果您想在 num1num2 之间进行检查,则需要仔细检查 for 循环的头部。
  • 提示:一个数可以被 4 和 6 整除,如果它可以被 12 整除...
  • 感谢您在 StackOverflow 上提交问题!请包含足够的代码(包括#include 语句),以便会员可以通过简单的剪切和粘贴来编译您的代码。
  • 旁注:保持控制台打开不是控制台应用程序的任务。这只会阻止程序在脚本中使用(没有任何主体可以按键......)。所以你不应该做system("pause")getchar()getch()(来自conio.h)之类的事情。相反,首先打开一个控制台(cmd.exe),导航到您的程序并从控制台中启动它...

标签: c++


【解决方案1】:

这是正确的程序:

#include <iostream>
using namespace std;

int main()
{
    int num1, num2, sum=0;

    cout << "Input first number : ";
    cin >> num1;
    cout << "Input second number : ";
    cin >> num2;


    for(int i = num1;i<=num2;i++) // if you want to include num1 and num2
    //for(int i = num1+1;i<num2;i++) // if you do not want to include num1 and num2
    {
        if ( i % 4 == 0 && i % 6 == 0)
        {
            sum = sum + i;

        }
    }
    cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
    system("pause");
    return 0;
}

【讨论】:

  • 我假设也应该检查下限(所以 no + 1 then...)。
【解决方案2】:

if(num1 % 4 == 0 && num2 % 6 == 0) 中的条件错误。

你需要把它改成:-

(i % 4 == 0 && i % 6 == 0)

【讨论】:

    【解决方案3】:

    有两个问题:

    首先,作为边界的 4 和 12 将产生 12,而不是 0,因此您需要在循环中也包含边界:

    for(int i = num1; i <= num2; i++)
    //                   ^ (!)
    //             ^ - 1 dropped
    

    那么你选择和的条件不正确:

    if(num1 % 4 == 0 && num2 % 6 == 0)
    

    请注意,num1 == 4num2 == 12 始终是这样,因此您可以总结 所有 之间的数字...您真正想要的是检查运行的变量在这两个边界之间,也就是i

    if(i % 4 == 0 && i % 6 == 0) // i will be 4, 5, ... , 11, 12 (with above fixed loop)
    

    此外,我们可以让它更短一点:一个数字可以被 4 和 6 整除,如果它可以被 12 整除。所以你的支票可能看起来像这样:

    if(i % 12 == 0)
    

    【讨论】:

      【解决方案4】:

      如上所述,您只需要检查 12 的整除性,并且您需要使用 i 作为条件检查。我的系统没有pause(),所以你可以使用另一个 cin >> 调用来创建暂停。当然,那么您必须提供字母/数字输入。空间不够。

      #include <iostream>
      using namespace std;
      
      int main()
      {
        int num1, num2, sum=0;
        int wait_var;
      
        cout << "Input first number : ";
        cin >> num1;
        cout << "Input second number : ";
        cin >> num2;
      
      
        for(int i = num1 + 1;i<num2;i++) // bounds are correct
        {
          if ( i % 12 == 0) // check for divisibility by 12 of i, not of the num1 and num2
          {
            sum = sum + i;
          }
        }
        cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
        cin >> wait_var;
        return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多