分配是建立一个函数来检查范围内的数字是否是非常强的数字,并将它们添加到向量中。当我调用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;
}
答案 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;
}