发现逻辑错误 c++
Spotting the Logic error c++
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main(int argc, char **argv)
{
string c;
int k = 0, decval, i;
cout << "Please input your number starting from lowest value number to highest" << endl;
cin >> c;
//the for loop takes a backwards integer and makes it forwards.
for(i = 0; i < c.length(); i++){
decval += (c[i] - '0') * pow(10, k);
++k;
}
cout << decval;
return 0;
}
所以我的问题是当我输入类似 564(想要得到 465 作为回报)时,我得到 462。我无法发现代码中的逻辑错误。请注意,我既是编码新手,也是堆栈溢出的新手,所以请不要太苛刻。任何帮助将不胜感激。
你忘了将decval
初始化为 0。它可能包含一个任意值,这会弄乱您的结果。
此代码:
(c[i] - '0') * pow(10, k);
将整型类型转换为浮点型,执行浮点数学运算,然后转换回整型。 (请参阅此问题)
您绝对有可能将 59.99999 的舍入误差向下舍入到 59。
将逻辑调整为仅使用整数数学将修复它。
int multiplier = 1;
for(i = 0; i < c.length(); i++, multiplier *= 10){
decval += (c[i] - '0') * multiplier;
++k;
}
这也是一个解决方案,我认为非常简单:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char **argv)
{
string str;
cout << "Please input your number starting from lowest value number to highest" << endl;
cin >> str;
reverse(str.begin(), str.end());
int number = stoi(str);
cout << number << endl;
return 0;
}
Drew和nicebyte在他们指出的方面都是正确的。只是想补充一点,您可以在没有 k
、额外的 multiplier
变量、调用 pow()
或舍入问题的情况下执行此操作:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main(int argc, char **argv)
{
string c;
int decval = 0, i;
cout << "Please input your number starting from lowest value number to highest" << endl;
cin >> c;
//the for loop takes a backwards integer and makes it forwards.
for( i=c.size()-1 ; 0<=i ; --i ) decval = c[i] - '0' + 10*decval;
cout << decval << endl;
return 0;
}
for
循环说明:
以数字4321
为例。从字符串的末尾开始,然后向后工作。即
- 第一次循环后,
decval = 1
. - 在第二个循环
decval = 12
之后。 - 在第三个循环之后,
decval = 123
. - 第四圈后,
decval = 1234
.
每次将十进制乘以 10 并添加新数字时。通过这样做,您不必第一次乘以 10,第二次乘以 100,第三次乘以 1,000,依此类推。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'