深入分析C++中两个大数相乘结果不正确的问题

2016-02-19 08:55 7 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐深入分析C++中两个大数相乘结果不正确的问题,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】

在编写代码做测试时发现两个大数相乘结果不正确的问题,测试代码如下:
#include "stdafx.h"
#includestdlib.h
#includetime.h
int _tmain(int argc, _TCHAR* argv[])

    time_t temp1=1345172428000000;
    time_t temp2=1345172428*1000000;
   ::system("pause");
    return 0;
}
经过测试发现temp1与temp2并不相等。
但是修改为如下代码:
#include "stdafx.h"
#includestdlib.h
#includetime.h
int _tmain(int argc, _TCHAR* argv[])
{
    time_t temp1=1345172428000000;
    time_t temp3=1345172428;
    time_t temp4=1000000;
    time_t temp2=temp3*temp4;
    ::system("pause");
    return 0;
}
经过测试发现temp1与temp2并相等。
分析原因:
    1345172428和1000000都是当做int型来处理的,他们相乘的结果也是当做int型,只是乘积会被强制转换成time_t,但是在求乘积的时候就已经溢出了,所以在转换成time_t也是错的。
结论:
    在大数乘法时需要考虑乘积溢出问题。

来源:http://www.tulaoshi.com/n/20160219/1588864.html

延伸阅读
标签: 电脑入门
    4.与 Themes 相关的若干注册表项受损。 除了系统文件的受损或需要重新注册外,某些与 Themes 相关的注册表项受损也可能引起无法正常应用 Themes。这些注册表项主要有: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVer...
标签: 电脑入门
在淘宝上买了一个4G 的U 盘,19 块。拿到手以后,我发现U 盘里有很多乱七八糟的文件,文件名全是乱码,而且打不开。看容量都超过10 个G 了。实际U 盘才4G啊。请问这到底是咋回事? U盘里出现乱七八糟的不明文件,这是比较典型的中毒症状。建议你关闭系统的autorun,然后使用杀毒软件清理U盘。如果扫描U盘,没有发现病毒,而且乱码文件依然存在...
点击上传按钮后,webwork的程序流如下: step 1)进入ServletDispatcher.service public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException { ........ request = wrapRequest(request); ......... } step2)进入ServletDispatcher.wrapRequest protect...
执行如下的jni调用: 代码如下: package jni; public class JNITransObject {  public native TestJNI[] ObjectMethod(String text);  static {   System.loadLibrary("JNITransObject");  }  public static void main(String args[]) {   JNITransObject jniTransObject = new JNITransObject()...
C++代码如下:  #include algorithm #include vector #include cstdio using namespace std; typedef  unsigned int Type; enum{ BASE_DATA = 10000, MAX_NUM = 100000 , MAX_SIZE = MAX_NUM+1000}; struct MulOpt { Type data1; MulOpt(Type x):data1(x){} inline Type operator()(Type y) { return data1*y; } }; struct Conver...

经验教程

178

收藏

50
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部