C++精度问题
我在这里问个题目哈。找出全部积为16!的数对有11223344556687178291200002.4160000001307674.368100002092278988...
我在这里问个题目哈。
找出全部积为16!的数对
有
112233 445566
8717829120000 2.4
16000000 1307674.368
10000 2092278988.8
1234567 890123
答案有4对,怎么求啊?
16!超过int范围了
有浮点型,又有整型。
难道用__int64。。
还有什么其他方法没。
纠结。
跟我说下思路哈。。 展开
找出全部积为16!的数对
有
112233 445566
8717829120000 2.4
16000000 1307674.368
10000 2092278988.8
1234567 890123
答案有4对,怎么求啊?
16!超过int范围了
有浮点型,又有整型。
难道用__int64。。
还有什么其他方法没。
纠结。
跟我说下思路哈。。 展开
展开全部
首先答案肯定不是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!}这个组合,做事要严谨。
以上就是我的看法,如果还有不懂得可以继续追问,希望解决你的问题。
其次你要明白所谓的浮点型的答案其实也是整数范畴的,你把另外一个数字的几个“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!}这个组合,做事要严谨。
以上就是我的看法,如果还有不懂得可以继续追问,希望解决你的问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询