C++精度问题

我在这里问个题目哈。找出全部积为16!的数对有11223344556687178291200002.4160000001307674.368100002092278988... 我在这里问个题目哈。

找出全部积为16!的数对


112233 445566
8717829120000 2.4
16000000 1307674.368
10000 2092278988.8
1234567 890123

答案有4对,怎么求啊?

16!超过int范围了

有浮点型,又有整型。

难道用__int64。。
还有什么其他方法没。

纠结。

跟我说下思路哈。。
展开
 我来答
beingcool
2010-10-04 · TA获得超过472个赞
知道小有建树答主
回答量:115
采纳率:0%
帮助的人:191万
展开全部
首先答案肯定不是4对,肯定多了去了。

其次你要明白所谓的浮点型的答案其实也是整数范畴的,你把另外一个数字的几个“0”拿过来给浮点型的数,不就也是整数了吗。

所以这个问题就归结为16!这个数分解为2个整数的问题。如果是整数分解,你就先应该明白如何对一个数分解为2个整数。

第一步要把数字写成质数相乘的形式。比如18这个数写成18 = 2*3*3的形式。
第二步就是把上面的质数进行排列组合,简单的说就是把上述质数分为2组即可,每一组所有质数的乘积就是你要的一组结果。比如2,3,3这3个数可以这样做,{2}和{3,3}为一种组合(2和9就是结果),{3}和{2,3},{3}和{3,2}。
第三步要去掉重复的,比如上面的第二组和第三组就重复了(因为有2个3的)。这样你就得到了结果18可以分为2个整数的分发时2和9,以及3和6,别忘了还有1和18。随后如果要浮点数,那就没完没了了。0.2和90,0.02和900都可以。

说下编程思路:
首先你要获得16!中的质数数组,就是写成18=2*3*3这种形式。不需要算出结果,你只要算1~16的整数分解形式就可以。把这些质数放入数组。
其次你需要不断取数组里面的数,假设数组里面有N个数。开始取1个数作为你要分解的整数1,然后其他质数的积作为整数2。然后再取2个数的积作为整数1,其他整数的积为整数2。如此反复。不断把你得到的整数1和整数2放入结果数组中即可。
最后需要注意的是,需要排除重复的整数1和整数2,还有不要忘记了{1}和{16!}这个组合,做事要严谨。

以上就是我的看法,如果还有不懂得可以继续追问,希望解决你的问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式