繁体   English   中英

如何从用户那里获取多个数字并将偶数相加并乘以奇数?

[英]How can I get multiple numbers from a user and add even numbers together and multiply odd numbers?

我想编写一个程序,它需要 5 个输入并添加偶数并乘以奇数,但是在我知道哪个数字是奇数和哪个是偶数之后我不知道该怎么做。

#include<iostream>

using namespace std;

int main(){
   
 int a, b, c, d, e, sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8, sum9, sum10;
    
    cout<<"Please Enter 5 Integers\t:\t";
    cin>>a>>b>>c>>d>>e;
    
    if(a%2==0 && b%2==0)
    {
        cout<<a+b;
        sum1 = a+b;
    }
    
    if(a%2==0 && c%2==0)
    {
        cout<<a+c;
        sum2 = a+c;
    }
    
    if(a%2==0 && d%2==0)
    {
        cout<<a+d;
        sum3 = a+d;
    }
    
    if(a%2==0 && e%2==0)
    {
        cout<<a+e;
        sum4 = a+e;
    }
    
    if(b%2==0 && c%2==0)
    {
        cout<<b+c;
        sum5 = b+c;
    }
    
    if(b%2==0 && d%2==0)
    {
        cout<< b+d;
        sum6 = b+d;
    }
    
    if(b%2==0 && e%2==0)
    {
        cout<<b+e;
        sum7 = b+e;
    }
    
    if(c%2==0 && d%2==0)
    {
        cout<< c+d;
        sum8 = c+d;
    }
    
    if(c%2==0 && e%2==0)
    {
        cout<<c+e;
        sum9 = c+e;
    }
    
    if(d%2==0 && e%2==0)
    {
        cout<<d+e;
        sum10 = d+e;
    }
    
    return 0;
}

您不需要所有这些变量,当然也不需要一次检查每个变量组合。 一个简单的循环就足够了。

尝试更多类似的东西:

#include <iostream>
using namespace std;

int main(){
   
    int number, sum = 0, product = 1;
    
    cout << "Please Enter 5 Integers\t:\t";

    for(int i = 0; i < 5; ++i)
    {
        cin >> number;
    
        if (number % 2 == 0)
            sum += number;
        else
            product *= number;
    }
    
    cout << sum << ' ' << product << endl;

    return 0;
}

这是一个非常粗略且相对简单的解决方案。 如果输入不能转换为 int,则会引发异常。 而且由于没有在任何地方捕获异常,因此如果用户输入无效输入,程序就会退出。

std::vector与数组大致相同。 它使您不必声明 5 个变量,而是将所有输入值存储在向量中。

stoi() function 将字符串转换为integerstoi = 字符串整数)。

#include <iostream>
#include <vector>
#include <string>

int main() {
    bool outputSum, outputProduct = false;
    std::vector<int> input;
    for (int i = 0; i < 5; i++) {
        std::string entered_string;
        int entered_value = 0;
        std::cout << "Please enter a number: ";
        std::cin>>entered_string;
        entered_value = stoi(entered_string);
        input.emplace_back(entered_value);
    }
    int sum = 0;
    int product = 1;
    for (int i = 0; i < 5; i++) {
        if (input[i] % 2 == 0) {
            sum += input[i];
            outputSum = true;
        } else {
            product *= input[i];
            outputProduct = true;
        }
    }
    if (outputSum) {
        std::cout << "Sum: " << sum << std::endl;
    }
    if (outputProduct) {
        std::cout << "Product: " << product << std::endl;
    }
    return 0;
}

我假设您不想在最后添加总和和乘积,因为您没有具体说明您希望 output 是什么。

对循环的理解使这段代码非常简单。 您存储这五个数字,但它们彼此断开连接,因为它们存储在单独的变量中。 现在你必须编写你所拥有的许多测试,这是一团糟,你觉得必须有一个更简单的方法。

正如其他答案所示,如果您以后不需要使用数字,那么您不需要五个变量进行输入; 一个就足够了。 您将输入存储到一个变量中,检查它是否是偶数/奇数,并相应地更新 sum 或 product 变量。 循环的重复使这项工作。

如果您需要显示数字或以其他方式保留它们以用于其他目的,则数组(或本例中的std::vector )会派上用场。

下面的代码演示了一个可以生成总和或乘积的 C++ 标准库 function ( std::reduce() )。 其他答案很好地展示了如何手动计算这些值。 重申一下,只有当您需要其他任务的数字时,才认为该解决方案是可行的。

#include <functional>  // std::multiplies
#include <iostream>
#include <numeric>  // std::reduce
#include <vector>

void print_container(std::vector<int> v) {
  for (auto i : v) {
    std::cout << i << ' ';
  }
  std::cout << '\n';
}

int main() {
  constexpr int numInputs = 5;

  std::vector<int> evenNums;
  std::vector<int> oddNums;

  for (int tmp, i = 0; i < numInputs && std::cin >> tmp; ++i) {
    tmp & 1 ? oddNums.push_back(tmp) : evenNums.push_back(tmp);
  }

  int sum = std::reduce(evenNums.begin(), evenNums.end(), 0);
  int product = std::reduce(oddNums.begin(), oddNums.end(), 1,
                                std::multiplies<int>());

  std::cout << "Even numbers: ";
  print_container(evenNums);
  std::cout << "Odd numbers: ";
  print_container(oddNums);
  std::cout << "Sum of evens: " << sum << "\nProduct of odds: " << product << '\n';
}

Output(输入为 1 2 3 4 5):

Even numbers: 2 4 
Odd numbers: 1 3 5 
Sum of evens: 6
Product of odds: 15

暂无
暂无

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

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