【问题标题】:Fastest way to sum 3 numbers digits求和 3 个数字的最快方法
【发布时间】:2020-05-01 08:55:19
【问题描述】:

我的老师要求我解决这个问题:“你得到 3 个不同长度的不同数字作为输入,你必须确定所有 3 个数字的数字之和以及乘积” 我是这样解决的:

#include <bits/stdc++.h>

using namespace std;

int main () {
    int a, b, c, S, P;
    cin >> a >> b >> c;
    S = 0;
    P = 1;

    while (a != 0) {
        int c1 = a % 10;
        S += c1;
        P *= c1;
        a /= 10;
    }
    while (b != 0) {
        int c1 = b % 10;
        S += c1;
        P *= c1;
        b /= 10;
    }
    while (c != 0) {
        int c1 = c % 10;
        S += c1;
        P *= c1;
        c /= 10;
    }
    cout << S << ' ' << P << endl;
}

我的问题是,有没有办法更有效地解决这个问题?

【问题讨论】:

    标签: c++ algorithm sum product


    【解决方案1】:

    您不应该为这样一个简单的程序没有意义的最快方式而烦恼,而应该为代码的正确性和避免重复而烦恼。

    你的程序不正确。

    对于初学者,用户可以中断输入。在这种情况下,变量 a、b、c 中的至少一个将具有不确定的值。因此,程序将具有未定义的行为。

    其次,当用户可以输入负数时,您使用的是带符号的 int 类型。在这种情况下,您将得到不正确的结果,因为例如数字总和可能为负数。

    第三,用户可以输入 0 作为数字的值。在这种情况下,这个数字将在这样的 while 循环中被跳过

    while (a != 0) {
    

    在这种情况下,您将再次得到错误的结果,因为数字的乘积不能等于零,尽管在这种情况下它必须等于零。

    重复相同的while循环。那就是程序有多余的代码。

    该程序可以按照下面的演示程序所示的方式编写。

    #include <iostream>
    
    int main() 
    {
        long long int a = 0, b = 0, c = 0;
    
        std::cin >> a >>b >> c;
    
        long long int sum = 0;
        long long int product = 1;
    
        for ( int num : { a, b, c } )
        {
            const long long int Base = 10;
            do
            {
                long long int digit = num % Base;
    
                if ( digit < 0 ) digit = -digit;
    
                sum += digit;
                if ( product ) product *= digit;
            } while ( num /= Base );
        }
    
        std::cout << "sum = " << sum << '\n';
        std::cout << "product = " << product << '\n';
    
        return 0;
    }  
    

    【讨论】:

      【解决方案2】:

      将重复的代码移到单独的函数中。

      #include <iostream>
      using namespace std;
      
      void calc(int num, int &sum, int &product) {
          do {
              int c1 = num % 10;
              sum += c1;
              product *= c1;
              num /= 10;
          }
          while (num != 0);
      } 
      
      int main () {
          int a, b, c, S = 0, P = 1;
          if (cin >> a >> b >> c) {
              calc(a, S, P);
              calc(b, S, P);
              calc(c, S, P);
              cout << S << ' ' << P << endl;
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2011-02-07
        相关资源
        最近更新 更多