注册 登录
编程论坛 C++教室

C++小白求助,麻烦大家帮帮忙

五点晨曦 发布于 2008-03-19 20:45, 1761 次点击
刚学了两天的C++……基本还是什么都不会,问题是这样的

#include <iostream>
using namespace std;
int main()
{
cout << 92934*29942 << endl;
}

我要计算 92934*29942 但是因为默认的双精度型表示范围不够大,结果发生溢出显示结果为-1512337468,于是换长双精度型92934l*29942l 还是溢出
怒了,按附件的计算机,得出2782629828,的确是超出了有效位……想问下这样该怎么写才能够不溢出?

[[it] 本帖最后由 五点晨曦 于 2008-3-19 20:51 编辑 [/it]]
17 回复
#2
sunkaidong2008-03-19 20:47
大数相乘可以用数组或链表解决...很麻烦不是一下可以说清楚的...
#3
五点晨曦2008-03-19 20:50
写成92934.0*29942.0倒是可以用科学计数法表示,不过精度不够啊-_,-

嘛,那来点简单的吧 910.37+9109234.92 同样是用科学计数法表示,精度也是不够……

[[it] 本帖最后由 五点晨曦 于 2008-3-19 20:53 编辑 [/it]]
#4
b003_xinkai2008-03-19 21:23
32位计算机里, C++  long 和 int 长度都是4位,所以会溢出,
#5
五点晨曦2008-03-19 21:25
LS居然注册个号来回答我的问题,感动ING~不过我知道会溢出,现在是在问怎么才能不溢出啊……
#6
boo3_小包子2008-03-19 21:27
我也是小白
这样不知道可以不可以
int iNum = 92934;
for(int i = 0; i < 29942;i++)
{
      iNum += iNum;
}
如果溢出了,就多做几个变量,多弄几个循环;
#7
五点晨曦2008-03-19 22:17
谢谢LS了,不过iNum是什么意思我没看明白……能麻烦讲解一下吗?请用教小学生1+1的方法来教我,因为我还是小白一个……谢谢了……
#8
boo3_小包子2008-03-19 22:19
[bo]以下是引用 [un]五点晨曦[/un] 在 2008-3-19 22:17 的发言:[/bo]

谢谢LS了,不过iNum是什么意思我没看明白……能麻烦讲解一下吗?请用教小学生1+1的方法来教我,因为我还是小白一个……谢谢了……

恩~~~~~~~~~iNum就是个变量名,随便起什么都行
#9
boo3_小包子2008-03-19 22:51
[bo]以下是引用 [un]五点晨曦[/un] 在 2008-3-19 22:17 的发言:[/bo]

谢谢LS了,不过iNum是什么意思我没看明白……能麻烦讲解一下吗?请用教小学生1+1的方法来教我,因为我还是小白一个……谢谢了……

恩~~~~~~~~~iNum就是个变量名,随便起什么都行
#10
飞陨2008-03-19 23:04
-_-|||...溢出不是计算方法造成的.
是数据占用内存大小造成的..
lz想知道具体解法..去问问沙发那个红发帅哥..一定要死缠着问..
#11
五点晨曦2008-03-20 11:53
咩哈哈哈~我百度来百度去,终于找到答案啦~其实很简单,多打一句话就可以了
#include <iostream>
using namespace std;
int main()
{
cout.precision(10);
    cout << 92934.0*29942.0 <<endl;
}

先用科学计数发算出答案,cout.precision ,就是显示的精度,我设为小数点后十位,就能显示出来了,不说了,赶紧交功课去
#12
microsoft_liu2008-03-23 09:43
用字符串....把的出的数字依次付给数组的a[i]
#13
与谁争疯2008-03-23 10:01
__int64  这个够你用了
#14
a198705022008-03-24 00:08
楼上的可以说清楚一点吗?
#15
muse2008-03-24 13:00
对于初学者 有数组做比较合适:先用每位数去乘以另外一个大数,分别放在另一个数组中,最后数组相加,并每位十进一……这样一定能实现

本人 草草想的,写出来不好看就是了
#16
newyj2008-03-24 13:34
谁能写出来代码啊
#17
zhazhaniu2008-03-24 13:51
自己写一个嘛……大数的计算是学会基础后的第一步不太难的提升~
我过年的时候写了个算2000位的~
#18
handongxue2008-03-25 16:30
这样就可以了:
#include<iostream>
using namespace std;

int main()
{  
    cout.precision(12);
    cout<<92934.0*29942.0<<endl;
}

你的程序不是溢出的问题,是输出表达错误。
1