gpt4 book ai didi

c++ - 将3个数字相加的最快方法

转载 作者:行者123 更新时间:2023-12-01 14:39:28 25 4
gpt4 key购买 nike

我的老师要求我解决这个问题:“您得到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;
}

我的问题是,有没有办法解决这个问题呢?

最佳答案

您不应该为那种简单的程序所无法理解的最快方式而烦恼,而应该为代码的正确性以及避免其重复而烦恼。

您的程序不正确。

对于初学者,用户可以中断输入。在这种情况下,变量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;
}

关于c++ - 将3个数字相加的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61539459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com