连续两次写入数字时出现逻辑错误 (C++)
Logic error in writing the number twice in a row (C++)
我一直在尝试用C++实现一些东西,但显然,有一个语法错误。
-
当输入 31 作为输入时,以下代码产生"1 3100":
#include<iostream> #include<cmath> using namespace std; int main() { long long n; cin>>n; long long j = floor((log10(n))); long long nn = (n*((long long)pow(10,j+1)))+n; cout<<j<<" "<<nn; }
-
以下代码为相同的输入生成"1 3130",即 31 :
#include<iostream> #include<cmath> using namespace std; int main() { long long n; cin>>n; long long j = floor((log10(n))); long long nn = (n*(pow(10,j+1)))+n; cout<<j<<" "<<nn; }
生成"1 3131"。基本上,我尝试连续两次写入数字:当您将数字解析为字符串并两次添加相同的字符串时,您会得到相同的内容(例如,n = 11,解析为s = "11",然后产生s + s(。
所以我想将输入乘以合适的十次方以获得足够的"尾随零",然后再次添加输入。
我哪里出错了?另外,为什么上面的两个代码之间有区别?(请解释为什么第一个代码将其作为输出,第二个代码将其作为输出,并帮助我使用较新的代码来获得所需的输出(。
没有语法错误,否则您的代码最终不会以可执行的方式运行。
"3130"意外输出的解释是在整数上下文中误用浮点函数。
long long n; cin>>n; // n becomes 31
long long j = floor((log10(n))); // j becomes 1
long long nn = (n*(pow(10,j+1)))+n; // the result from pow is a floating point just below 100
// integer-multiplied by 31 gives 3099
// adding 31 results in 3130
cout<<j<<" "<<nn; // output 3130
相关文章:
- 警告处理为错误这里有什么问题
- "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'