[英]Square Root Code C++ without sqrt()
我必須創建一個代碼,讓用戶輸入一個完美的正方形數字,並且必須顯示其根。 我已經編寫了這段代碼,但是在此段中出現了Segmentation Fault 11
: int 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
),並且這些元素的索引從0
到n-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.