大数相乘有关位数的计算问题

问题描述

大数相乘有关位数的计算问题

如果两个大数在十位或者以下,计算结果正确,超过十位则计算错误,有时结果还会为负,这是什么情况

解决方案

Java可使用BigInteger、BigDecimal来操作

解决方案二:

大数计算问题
大数相乘问题
大数相乘问题

解决方案三:

数据溢出了。比如在C语言中,int类型的数据范围时-32768到32767,如果数据是32768,比32767大1,那数值就变成-32768了。

你用的是什么数据类型?10位乘以10位,那至少是20位以上的大数,你看看你那个数据类型最大值是多少?

解决方案四:

int64不够用,得换算法,16位 乘 16位,结果至少有32位数字啊,没法用一个数据类型表示,只能换算法。

int64的最大值:9223372036854775807
int64的最小值:-9223372036854775808
unsigned int64的最大值:18446744073709551615

请参考这个,这里有思路:http://blog.csdn.net/haisheng95/article/details/7649711

解决方案五:

要不你看看这个,这个将算法写的清清楚楚。C语言_大数四则运算

http://wenku.baidu.com/link?url=uv6lir0V2tIe144Gw7JVSxlwJQIKUba2Wnv4C2oBvzX4BnfrN4CCKI3WNi9xE94VAzHcrZSB1-roUoL7U6uLvdA_6ELdzye1nk50-mTEL3K

时间: 2024-09-06 17:13:56

大数相乘有关位数的计算问题的相关文章

一道c的面试题,大数相乘。

这是我亲身经历的一个面试题目,并且表现的是整个面试里面最为糟糕的环节,令我十分恼火.回来以后我在tc2.0上写它,发现依然花费了我相当多的时间用于改错和调试(从这一点来看,我面试里的表现也算正常了).尽管这个问题看起来是如此的简单.当然,这里面有我对c 和c++的生疏和不熟练也有很大关系,此外是对算法的学习和研究还没有完成,还处于一个准备阶段. 题干:输入两个较大的数,输出相乘的结果.意思也就是两个数很大,超出了int的存储范围. #include <stdio.h>#include <

用javascript实现两个大数相乘

(function (){ var addLarge = function(n1,n2){ var carry = 0; var ret = ""; n1=n1.toString(); n2=n2.toString(); var len = Math.min(n1.length,n2.length); var sln1 = n1.substr(n1.length - len,n1.length ); var sln2 = n2.substr(n2.length - len,n2.len

java大数相乘,希望出界抛异常。

问题描述 如题,我自己测试的时候,如果两个int型大数相乘,结果为负,求检测溢出的方法,并掷出异常的代码 解决方案 /** * Multiply two integers, checking for overflow. * * @param x a factor * @param y a factor * @return the product <code>x*y</code> * @throws ArithmeticException if the result can not

C#大数相乘问题,用三个数组来存储

问题描述 C#大数相乘问题,用三个数组来存储 最好用分治法解决问题,然后能够运算20位左右的大数相乘,控制台和窗口都行 解决方案 http://blog.csdn.net/xianfajushi/article/details/49555767 解决方案二: 比较难写你再给你个思路吧,你完善下. ``` public class dashucheng { public string cs;//乘数 public string bcs;//被乘数 public string cheng()//乘操

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

在编写代码做测试时发现两个大数相乘结果不正确的问题,测试代码如下: #include "stdafx.h"#include<stdlib.h>#include<time.h>int _tmain(int argc, _TCHAR* argv[]){      time_t temp1=1345172428000000;    time_t temp2=1345172428*1000000;   ::system("pause");    re

大数相乘

#include<stdio.h>#include<string.h>void main(){ char a[100],b[100]; int c[205]={0};int c1,c2,i,k; scanf("%s%s",a,b); c1=strlen(a); c2=strlen(b); for(i=0;i<c1;i++)//乘数 for(k=0;k<c2;k++)//被乘数 c[i+k]+=(a[c1-i-1]-'0')*(b[c2-k-1]-'0

设计-计算n位数为止的3的最大幂运算

问题描述 计算n位数为止的3的最大幂运算 对于一个正整数n(0<n<80),写一个输出n位数以内最大的3的幂运算例 输入1输出9 输入2输出81 输入6输出531441 输入60输出436673502879206784130402698570834024654748577491697818855443 以下是我自己写的程序 #include<stdio.h>#include<string.h>int main(void){ int insum=1; char m[999

JS实现两个大数(整数)相乘_javascript技巧

大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示.那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下: 复制代码 代码如下: console.log(bigMut("567", "1234")); // 699678 function bigMut(big, common) { big += ""; common += ""; if (big.length < common.length)

Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算

上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘.相加.相减的功能.其他的不做过多的铺垫了,我先讲一下各个功能的计算原理. Ⅰ. 乘法运算 为什么先说乘法运算--因为我先做了乘法运算.其实思路也是很多的,但是最终我参考了网络上的一种计算方案,然后做了很多的修改.感觉这个在思路上应该是比较简单的. 简单点说:把数拆分成整数小数分别进行乘法运算,然后将结果放入一个特定长度的数组中,在放入是要计算存放的偏移位置,最后再对这个进行处理(进位.标记等),得到最终的结果. 是不是有点晕.请我详细说一