深入分析C++中两个大数相乘结果不正确的问题
C++ 问题 正确 两个 结果 深入分析 大数 相乘
2023-06-13 09:14:54 时间
在编写代码做测试时发现两个大数相乘结果不正确的问题,测试代码如下:
#include"stdafx.h"
#include<stdlib.h>
#include<time.h>
int_tmain(intargc,_TCHAR*argv[])
{
time_ttemp1=1345172428000000;
time_ttemp2=1345172428*1000000;
::system("pause");
return0;
}
经过测试发现temp1与temp2并不相等。
但是修改为如下代码:
#include"stdafx.h"
#include<stdlib.h>
#include<time.h>
int_tmain(intargc,_TCHAR*argv[])
{
time_ttemp1=1345172428000000;
time_ttemp3=1345172428;
time_ttemp4=1000000;
time_ttemp2=temp3*temp4;
::system("pause");
return0;
}
经过测试发现temp1与temp2并相等。
分析原因:
1345172428和1000000都是当做int型来处理的,他们相乘的结果也是当做int型,只是乘积会被强制转换成time_t,但是在求乘积的时候就已经溢出了,所以在转换成time_t也是错的。
结论:
在大数乘法时需要考虑乘积溢出问题。
#include"stdafx.h"
#include<stdlib.h>
#include<time.h>
int_tmain(intargc,_TCHAR*argv[])
{
time_ttemp1=1345172428000000;
time_ttemp2=1345172428*1000000;
::system("pause");
return0;
}
经过测试发现temp1与temp2并不相等。
但是修改为如下代码:
#include"stdafx.h"
#include<stdlib.h>
#include<time.h>
int_tmain(intargc,_TCHAR*argv[])
{
time_ttemp1=1345172428000000;
time_ttemp3=1345172428;
time_ttemp4=1000000;
time_ttemp2=temp3*temp4;
::system("pause");
return0;
}
经过测试发现temp1与temp2并相等。
1345172428和1000000都是当做int型来处理的,他们相乘的结果也是当做int型,只是乘积会被强制转换成time_t,但是在求乘积的时候就已经溢出了,所以在转换成time_t也是错的。
在大数乘法时需要考虑乘积溢出问题。
相关文章
- Dev-c++中将头文件和头文件函数分离,编译主函数跳出undefined reference to 的问题解决
- C++丨初识C++像极了C语言
- c++文件读写操作
- CC++中计时、延时函数「建议收藏」
- C++ 调用Matlab画图「建议收藏」
- C++stl库_c++库
- 【如何手写strcpy和memcpy】c++面试常问问题总结01
- C++20 Text Formatting/fmtlib 适配问题小记
- 在基础语法中Java与c++有哪些不同?(对于学过c++转Java必看)
- C++ 栈和典型的迷宫问题
- C/C++ 文件与指针操作笔记
- 一剑破万法:noexcept与C++异常导致的coredump
- 面试高频问题之C++编译过程
- 本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT
- C++11:可变参数模板/lambda表达式
- C屁屁(c++)万字入门
- c++基础篇之C++ 模板
- C++游戏开发需要阅读的书籍详解编程语言
- C++线性同余法生成随机数(linear_congruential_engine)用法详解
- 关于C++中0是十进制还是八进制的问题
- c++探讨奶牛生子的问题
- VC++开发中完美解决头文件相互包含问题的方法解析
- C++多文件变量解析
- C++调试追踪class成员变量的方法
- c++中虚函数和纯虚函数的作用与区别