簡體   English   中英

不帶sqrt()的平方根代碼C ++

[英]Square Root Code C++ without sqrt()

我必須創建一個代碼,讓用戶輸入一個完美的正方形數字,並且必須顯示其根。 我已經編寫了這段代碼,但是在此段中出現了Segmentation Fault 11int j = squareRootVector[i]; squareRoot.push_back(j); int j = squareRootVector[i]; squareRoot.push_back(j); 我不能太多更改代碼,所以有辦法嗎?

#include <iostream>
#include <vector>

using namespace std;


int main() {

cout <<

 "Enter the number:\n";

    int input;
    int number = input;
    int divider = 2;
    vector<int> squareRootVector;
    vector<int> squareRoot;

    cin >> number;

    for(int divider = 2; number > 1; divider++) {
        while((number % divider) == 0) {
            number /= divider;
            cout << number << endl;
            squareRootVector.push_back(divider); 
        }
    }


    for(int i = 0; i < squareRootVector.size(); i++) {
        cout << squareRootVector[i] << " ";

        /*******PROBLEM*******/
        if(squareRootVector[i] == squareRootVector[i+1]) {
            int j = squareRootVector[i];
            squareRoot.push_back(j);
        }
        /*********************/
    }

    int root;

    for (int i = 0; squareRoot.size(); i++) {
        root = root * squareRoot[i];
    }

    cout << "Square Root of " << input << " is: " << root << endl;


    return 0;
}

有關訪問行為squareRootVector[i+1]i只是一個以下size (其你的循環constaint允許) 未定義

考慮寫作

for (std::size_t i = 1; i < squareRootVector.size(); i++) {

而是相應地重新設置for循環主體。 我也為i換了一個字型。

很快,問題是最后一個“ for”中的最后一個循環:

for(int i = 0; i < squareRootVector.size(); i++)

包含以下行:

squareRootVector[i] == squareRootVector[i+1];

這是一個“超出限制”的錯誤: squareRootVector僅具有squareRootVector.size()元素(比方說n ),並且這些元素的索引從0n-1

最后一個循環中的squareRootVector[i+1]指向squareRootVector的最后一個元素之后的一個元素,這是未定義的行為。

使用vector :: iterator是正確的方法。

for(vector<int>::iterator it = squareRootVector.begin(); it != squareRootVector.end(); ++it)
{
    if( (it+1) == squareRootVector.end() )
    {
        //what to do if there's no next member???
        break;
    }

    if( *it == *(it+1) )
    {
        squareRoot.push_back(*it);
    }
} 

謝謝大家的回答。 我最終得到了以下代碼:

#include <iostream>
#include <vector>

using namespace std;


int main() {

cout << "Enter the number:\n";

int input = 0;
int number = 0;
cin >> input;
number = input;
int divider = 2;
vector<int> squareRootVector;
vector<int> squareRoot;



for(int divider = 2; number > 1; divider++) {
    while((number % divider) == 0) {
        number /= divider;
        squareRootVector.push_back(divider); 
    }
}

int vectorSize = squareRootVector.size() - 1;


for(int i = 0; i < vectorSize; i++) {
    if(squareRootVector[i] == squareRootVector[i+1]) {
        int j = squareRootVector[i];
        squareRoot.push_back(j);
    }
}

int root = 1;

for (int i = 0; i < squareRoot.size(); i++) {
    root = root * squareRoot[i];
}

cout << "Square Root of " << input << " is " << root << endl;


return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM