| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1558 人关注过本帖
标题:新手求救!
只看楼主 加入收藏
smallthree_3
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-7-10
收藏
 问题点数:0 回复次数:14 
新手求救!

谁能帮我编一个求 n!的程序 用面向对象。谢谢

搜索更多相关主题的帖子: 谢谢 
2004-10-03 17:17
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

class live41 { public: live41(int n); { n*=n++; } }; void main() { int n; cin>>n; live41 Queenie(n) }

以上代码有错,至于哪里错了,请你自己改回来吧!

[此贴子已经被作者于2004-10-03 17:48:15编辑过]

2004-10-03 17:47
smallthree_3
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-7-10
收藏
得分:0 
Queenie(n) 是什么函数?
2004-10-03 21:08
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

你既然要求用面向对象,我写的面向对象你自己应该要懂!

那个不是函数,而是构造函数。

2004-10-03 21:17
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

我们知道任何数据类型都有其数据上限,n 阶乘,就很有可能突破 Integer 的数据上限,为了解决这个问题,我们可以动态开辟内存,设计3个 integer array, 一个用于存放乘数,一个用于存放被乘数,一个用于存放计算结果。

假设我们已经解决了 任意两个数相乘 的问题, 那么 n 阶乘 的问题就解决了。

现在的问题是如何解决 任意两个数相乘 的问题?

我的算法如下,先将两个数转化为 2的米 的和, 比如:

56 * 10 = (32 + 16 +8)* (8+2)= 32*8 + 16*8 + 8*8 + 32*2 + 16*2 + 8*2 = 32 <<2 + 16<<2 + 8<<2 + 32<<1 +16<<1+ 8<<1 这样的话,在子程序中动态开辟5个 integer array, 在每个 array 中以二进制形式存放数据 32 16 8 8 和2 再通过移位的方式得出中间计算结果,再相加。最后得出 a*b 的结果。有了 a*(a-1), 然后再以 a*(a-1) 的结果和 (a-2) 相乘, 最终得出 a 的阶乘(这个时候还是 2 进制的形式,也就是说,他们还是 0, 1 的组合,于结果这个 array 中,最后我们将这个 2 进制 转化为 10 进制。然后输出,这样你便看到 任何一个数的 阶乘的结果了。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-10-03 21:20
smallthree_3
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-7-10
收藏
得分:0 

2楼的大哥,构造函数不是要跟类同名吗? live41(int n);应该是构造函数吧?

我并没有看到你在类里 定义 Queenie(n)这个函数阿

这到底深什么意思啊?

2004-10-03 22:19
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

晕啊!我class live41{...};

然后live41 Queenie; 对象化一个对象,难道调用构造函数时是写live41吗?!

2004-10-03 23:09
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
以下是引用kai在2004-10-03 21:20:17的发言:

我们知道任何数据类型都有其数据上限,n 阶乘,就很有可能突破 Integer 的数据上限,为了解决这个问题,我们可以动态开辟内存,设计3个 integer array, 一个用于存放乘数,一个用于存放被乘数,一个用于存放计算结果。

假设我们已经解决了 任意两个数相乘 的问题, 那么 n 阶乘 的问题就解决了。

现在的问题是如何解决 任意两个数相乘 的问题?

我的算法如下,先将两个数转化为 2的米 的和, 比如:

56 * 10 = (32 + 16 +8)* (8+2)= 32*8 + 16*8 + 8*8 + 32*2 + 16*2 + 8*2 = 32 <<2 + 16<<2 + 8<<2 + 32<<1 +16<<1+ 8<<1 这样的话,在子程序中动态开辟5个 integer array, 在每个 array 中以二进制形式存放数据 32 16 8 8 和2 再通过移位的方式得出中间计算结果,再相加。最后得出 a*b 的结果。有了 a*(a-1), 然后再以 a*(a-1) 的结果和 (a-2) 相乘, 最终得出 a 的阶乘(这个时候还是 2 进制的形式,也就是说,他们还是 0, 1 的组合,于结果这个 array 中,最后我们将这个 2 进制 转化为 10 进制。然后输出,这样你便看到 任何一个数的 阶乘的结果了。

kai很耐心很详细啊,不过<<是什么运算符?看不懂啊!

2004-10-03 23:12
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

考!位移!

PS:又灌一贴![如果你想删,请下黑手]


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-03 23:17
smallthree_3
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-7-10
收藏
得分:0 
呵呵 我太菜请原谅
2004-10-03 23:28
快速回复:新手求救!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027572 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved