Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将数字相乘_C++ - Fatal编程技术网

C++ 将数字相乘

C++ 将数字相乘,c++,C++,我想建立以下程序: 用户必须插入一个介于100和999之间的数字(如100x&&x>=100&&x>x&&x>=100&&x人们可能会说,您的解决方案并不优雅,因为如果您想添加更多摘要或删除一些摘要,它不容易扩展。 当用户输入超过4个字符时,第一个也会出现缓冲区溢出! 但是出于我的选择,我非常喜欢第二个,因为它比仅仅通过int n;std::cin>>n;读取数字、验证数字然后计算结果更好地理解了C 但是还有一个小缺陷,您需要检查scanf的返回值,以检测数字是否已成功解析 int res =

我想建立以下程序:

用户必须插入一个介于100和999之间的数字(如
100
),并且这些数字之间必须相乘。 例如:

  • 有效输入:178
  • 对应结果:1*7*8=72
我试图实现第一部分,即通过以下两种方式检查输入的数字是否在100和999之间,但我的方法并不优雅:

#包括
int main()
{
charn[4];
scanf(“%s”,n);
printf(“%d\n”,(n[0]-'0')*(n[1]-'0')*(n[2]-'0'));
返回0;
}

#包括
int main()
{
int数组[3];
scanf(“%1d%1d%1d”、&array[0]、&array[1]、&array[2]);

对于(int i=0;i您可以在一段时间内将
std::cin
作为条件:

intx;

虽然(std::cin>>x&&x>=100&&x>x&&x>=100&&x人们可能会说,您的解决方案并不优雅,因为如果您想添加更多摘要或删除一些摘要,它不容易扩展。
当用户输入超过4个字符时,第一个也会出现缓冲区溢出!
但是出于我的选择,我非常喜欢第二个,因为它比仅仅通过
int n;std::cin>>n;
读取数字、验证数字然后计算结果更好地理解了C

但是还有一个小缺陷,您需要检查
scanf
的返回值,以检测数字是否已成功解析

int res = scanf("%1d%1d%1d", &array[0],&array[1],&array[2]);
if(res != 3) {
   printf("Invalid number format. Expected a three digit number, but got %d", res);
   return 0;
}

更优雅的解决方案是将数字作为整数,然后通过除法和模运算将其分解为单个数字

这大大提高了验证输入数字的能力,如果数字不是以字符串形式给出的,而是从程序的其他部分以数字形式给出的,那么知道如何分解整数可能会很有用

示例代码:

#include <stdio.h>

int main() {
    int number;
    scanf("%d", &number);

    if(number > 999 || number < 100) {
        printf("Number not in range\n");
        return -1;
    }

    printf("%d\n",
            (number / 100) *        // hundreds digit
            (number / 10 % 10) *    // tens digit
            (number % 10)           // units digit
    );

    return 0;
}
#包括
int main(){
整数;
scanf(“%d”和编号);
如果(编号>999 | |编号<100){
printf(“数字不在范围内\n”);
返回-1;
}
printf(“%d\n”,
(数字/100)*//百位数字
(数字/10%10)*//十位数
(数字%10)//单位数字
);
返回0;
}

为了澄清,请说明您试图解决的特定问题。如果您的代码工作不正确,请指定环境(用户输入)、它的作用以及您希望它做什么。如果您不知道如何实现功能,请指定该功能,并删除与之无关的所有内容。
int n;scanf(“%d”,&n);
?或者更好,使用iostream:
int n;std::cin>>n;
。阅读后验证数字。哦,人们说这样回答这样的问题并不优雅。那是因为我正在尝试另一种方法来获得最终结果……如果你将其通过代码格式化程序,它会更优雅;)但是,撇开玩笑不谈,它们都是C,第一个是非常不安全的(它依赖于用户准确输入3位数字)如果你想用C++来写这个,你就必须从头再来。不是很优雅。谁能这么做?嘿,非常感谢。这完全有帮助。我会添加到我的文件夹中,并会创造新的功能来练习。因为它以你想要的为借口是有效的。(100到999之间数字的乘积)您为输入部分提供了两种方法,这显示了一点努力。这不应该被关闭。这也是投票。是的,这是我第一次来这里。我正在学习它是如何工作的。这意味着什么?这个案例已经结束,没有人可以添加信息?@Cordas是的,一旦一个问题被关闭,它就不能被重新回答,也不能有任何新的答案现有的解决方案。更多信息,请查看。嗨,谢谢你的回答。这是第二种解决方法。我应该在未来准备什么?我需要详细说明许多解决方案还是只有一个?因为我看到,任何解决方案都会有不同的解决方案…不仅是针对此类问题,而且在一般意义上