做多做多错了
long long division wrong
本文关键字:错了 更新时间:2023-10-16
我在一个项目中工作,在某个特定的时间内我遇到了这个问题。我有两个非常大的数字,我想把它们除以,得到一个整数/长整数。这就是正在发生的事情:
代码
#include <iostream>
using namespace std;
int main(){
long long n,m;
cin >> n >> m;
cout << n/m << endl;
}
输入可以是100000000000000000之前的数字,因此除法执行错误。
输出
#1 n: 76543210987654321 m: 7654321
#2 76543210987654321/7654321 = 1410312449
正确答案是10000000130,所以我想知道发生了什么。。。
正确的结果既不是1410312449
也不是10000000130
。等于10000000129
至少这是GCC在www.ideone.com上展示的内容。你可以自己尝试。
#include <iostream>
int main()
{
long long n = 76543210987654321;
long long m = 7654321;
std::cout << n / m << std::endl;
return 0;
}
您似乎将操作的结果放置在类型为int
的对象中。考虑以下代码
#include <iostream>
int main()
{
long long n = 76543210987654321;
long long m = 7654321;
int x;
x = n / m;
std::cout << n / m << std::endl;
std::cout << x << std::endl;
return 0;
}
输出为
10000000129
1410065537
除法的结果似乎被截断为32位值(int
)。尝试通过static_cast
对long long
使用显式强制转换。另外,了解sizeof(long long)
在编译器上的结果也很有趣。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 首要问题的答案让值班员搞错了
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 如何正确使用 >=?(a+f()+c)>=0 错了吗?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 指针相关的UE4崩溃.我的指针哪里错了?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 理解C++内存顺序,我错了吗?