找到给定范围内的阿姆斯特朗数的函数在某些时候失败了

时间:2016-03-12 15:56:46

标签: c++

分配是建立一个函数来检查范围内的数字是否是非常强的数字,并将它们添加到向量中。当我调用main时会出现一些问题,它不会执行for循环部分。我认为函数没问题,因为当我调用函数时,没有错误。代码如下,我希望你能帮助我。

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

std::vector<int> ArmstrongoviBrojevi (int , int );

std::vector<int> ArmstrongoviBrojevi (int p, int q) {
    //function start
    int z=0;
    if (p<0){
        std::vector<int> dodajVrijednost;    
        for (int i=1;i<=q;i++){
            std :: string a = std:: to_string(i);
            //check for length 
            int duzina = a.length();
            int sum=0;
            //check if number if armstrong
            while (i>0){
                int cifra=i%10;
                i/=10;
                sum+=pow(cifra,duzina);

            }
            //add to the vector
            if (sum==i){


                dodajVrijednost[z];
                z++;

            }

            return dodajVrijednost;

        }
    }
}

//main
int main() {
    std::cout << "Zadaća 1, Zadatak 1";

    int a,b;
    std::cout << "Molim vas unesite 2 broja" << std::endl;
    std::cin >> a>>b;
    std::vector<int>kopija ;

    for (int g=0;g<ArmstrongoviBrojevi(a,b).size();g++){
        if (g!=int(ArmstrongoviBrojevi(a,b).size())-1){
        std::cout << ArmstrongoviBrojevi(a,b)[g] <<","<< std::endl;
        }
        else
        std::cout << ArmstrongoviBrojevi(a,b)[g] << std::endl;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

ArmstrongoviBrojevi函数中至少有两个错误。我想主要的一点是,当条件p < 0返回false时,您不会返回任何值,但main仍在尝试访问它。要解决此问题,您可以在dodajVrijednost块之外声明if并在其后返回值

std::vector<int> dodajVrijednost;
if (p < 0) {
    ...
}
return dodajVrijednost;

另一个是dodajVrijednost[z];应为dodajVrijednost.push_back(z);。因为在索引z之前没有元素之前,你不会在某处为向量分配内存。仅仅声明dodajVrijednost[z];没有任何意义。

我还会修改main函数,因为现在每次重新计算向量,最好一次计算结果。

std::vector<int> armstrongoviBrojevi = ArmstrongoviBrojevi(a,b);
for (int g=0;g<armstrongoviBrojevi.size();g++){
    if (g!=armstrongoviBrojevi.size()-1){
    std::cout << armstrongoviBrojevi[g] <<","<< std::endl;
    }
    else
    std::cout << armstrongoviBrojevi[g] << std::endl;
}