平方根代码C 无SQRT()
Square Root Code C++ without sqrt()
我必须创建一个代码,其中用户输入一个是一个完美正方形的数字,我必须显示其根。我已经制作了此代码,但是在此文章中,我得到了Segmentation Fault 11
: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;
}
使用i
访问squareRootVector[i+1]
的行为仅在size
下方一个(您的循环constaint允许)是 und> undefined 。。
考虑写作
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;
}
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 平方根代码C 无SQRT()
- 如何使用Dev C++检查数学库函数sqrt()中的代码