如何用C++生成数字表中的3位数字?

如何用C++生成数字表中的3位数字?,c++,arrays,numbers,generate,C++,Arrays,Numbers,Generate,我是一个新的程序员,我想从数字列表2,5,8中生成一个3位数的数字数组。我已经创建了一个代码,但是输出不是我期望的结果。这是我的简单代码: int main() { int arr[3]={2,5,8}; int d=3; int times=1; for (int a:arr){ int sum = a; for (int i=1; i<d; i++){ times *= 10;

我是一个新的程序员,我想从数字列表2,5,8中生成一个3位数的数字数组。我已经创建了一个代码,但是输出不是我期望的结果。这是我的简单代码:

int main()
{
    int arr[3]={2,5,8};

    int d=3;
    int times=1;

    for (int a:arr){
        int sum = a;
        for (int i=1; i<d; i++){
            times *= 10;
            sum += a*times;
        }
        cout<<sum<<endl;
        sum=0;
    }

    return 0;
}

我的预期结果是222555和888,但实际输出是22255005和880008。

这可能会有所帮助。您忘记重置时间变量

使用std::stringstream,它变得微不足道:

#include <sstream>
#include <iostream>

int main()
{
  std::stringstream ss;
  ss << 2 << 5 << 8; 
  int result{};
  ss >> result;
  std::cout << result << std::endl;
}

为了使当前代码生成222555888,您忘记了重新生成时间

您可能已经创建了一个子函数进行澄清:

int mul_by_111(int n) // { return 111 * n; }
{
    int sum = a;
    int times = 1;
    for (int i = 1; i < 3; ++i) {
        times *= 10;
        sum += a * times;
    }
    return sum;
}

int main()
{
    int arr[] = {2, 5, 8};
    for (int a:arr){
        std::cout << mul_by_111(a) << std::endl;
    }
}

问题在于变量的范围。只要把它们放在街区里,一切都会好起来:

int main()
{
    int arr[3]={2,5,8};

    int d=3;

    for (int a:arr){
        int sum = a;
        int times=1;
        for (int i=1; i<d; i++){
             times *= 10;
             sum += a*times;
        }
        cout<<sum<<endl;
    }
    return 0;
}

变量sum和times将在blockentry上初始化。无需重置它们。

您忘记重置次数,请坚持a次=1;在你的外循环中。你不应该为数组中的每个数字重置times变量吗?@vahancho是的,我不应该重置times变量。谢谢你提醒我。@Blaze你说得对,我忘了那件事。谢谢你提醒我。@jowwyss79没问题,很高兴有帮助。Raffallo将其包装成了一个答案,因此请确保对其进行投票并选择它作为接受的答案。首先,我还考虑使用stringstream解决我的问题。但它是否可以从列表2、5、8中生成所有3位数字的数字,如2852882等?@jowyss79我根据您的请求更新了答案。这有意义吗?是的,有意义。谢谢你的更新,它帮助了我。似乎op想要笛卡尔积op也想要222,而std::next_置换只提供置换,所以:25828552852828282582582552。它真的帮助了我。非常感谢。
int mul_by_111(int n) // { return 111 * n; }
{
    int sum = a;
    int times = 1;
    for (int i = 1; i < 3; ++i) {
        times *= 10;
        sum += a * times;
    }
    return sum;
}

int main()
{
    int arr[] = {2, 5, 8};
    for (int a:arr){
        std::cout << mul_by_111(a) << std::endl;
    }
}
int main()
{
    int arr[] = {2, 5, 8};
    for (int a:arr){
        for (int b:arr){
            for (int c:arr){
                std::cout << a << b << c << std::endl;
            }
        }
    }
}
for (auto t : ranges::view::cartesian_product(arr, arr, arr)) {
    std::cout << std::get<0>(t) << std::get<1>(t) << std::get<2>(t) << std::endl;
    // std::apply([](auto... args){ (std::cout << ... << args) << std::endl; }, t); // C++17
}
int main()
{
    int arr[3]={2,5,8};

    int d=3;

    for (int a:arr){
        int sum = a;
        int times=1;
        for (int i=1; i<d; i++){
             times *= 10;
             sum += a*times;
        }
        cout<<sum<<endl;
    }
    return 0;
}