| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 457 人关注过本帖
标题:各位,求大数处理办法,请看题,
只看楼主 加入收藏
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:5 
各位,求大数处理办法,请看题,
  一个N位的十进制整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
     例如:
  当N=3时,153 就满足条件,因为1^3+5^3+3^3=153,....
  当N=21,时求满足条件的所有花朵数....
  
  这个题目,的难处是,这些大数的处理办法,就算是用long long 64位也是越界,各位有什么好
  的办法可以处理这些越界的天文数字啊,难道真是要转换一个更大的进制来处理?
  各位求更好的方法啊。请具体介绍哦,。。。
  还有就是求满足这个数的方法,算法,有什么高效的方法呢,用穷举,暴力,好像行不通的,
  请说说具体解决办法,小弟感激不尽哦,
  
搜索更多相关主题的帖子: 十进制 暴力 
2013-11-23 20:17
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:50 
这不是我前两天开的帖子么?

首先,对于越界,可以用数组模拟,比如 int a[21] 就可以

for (i = a;i < b;++i) 肯定是不行的,10 ^ 21 运行效率太差

水仙花数第二种思路
for (i = 1;i < 10;++i)
  for (j = 0;j < 10;++j)
    for (k = 0;k < 10;++k)   即列举每一位再求和判断, 21 ^ 10 远小于 10 ^ 21,但事实上 21 ^ 10 还是很大


然后就是当时楼下回复我的代码了。

把21分成10个数的和,分别表示某个结果所代表的数中 0 1 2...9 出现的次数比如 3 + 0 + 0 + ... + 18,表示 3个0,18个 9组成的数

如果18 * 9 ^ 21 = A ,A是21位整数 且 A中有 18个 9,3个 0,那么 A就是水仙花数

C(30)9 的数量级,远小于 21 ^ 10


我建议你先写出数组模拟大数运算的 加法 乘法,再写出第二种方案,最后写第三种


[fly]存在即是合理[/fly]
2013-11-23 20:39
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
回复 2楼 azzbcc
大数运算的加,减,乘,除,还真没做过呢,就是不知用数组,如何来模拟呢,我个人有的思路就是,用 int a[21],来表示这个21位数,也是用10进制来
因为这样方便的,但如何查找这花朵数,还真想不想好的办法,也没有去写过,呢,我去看过你贴的答案,再细细想想别人的思路吧,

编写的程序,不能改变世界,却可以改变自己...
2013-11-23 22:19
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:30 
  同一个帖子  为毛在这么短时间内被两个人各发一次...

三十年河东,三十年河西,莫欺少年穷!
2013-11-24 01:43
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:10 
以下是引用azzbcc在2013-11-23 20:39:20的发言:

这不是我前两天开的帖子么?
 
首先,对于越界,可以用数组模拟,比如 int a[21] 就可以
 
for (i = a;i < b;++i) 肯定是不行的,10 ^ 21 运行效率太差
 
水仙花数第二种思路
for (i = 1;i < 10;++i)
  for (j = 0;j < 10;++j)
    for (k = 0;k < 10;++k)   即列举每一位再求和判断, 21 ^ 10 远小于 10 ^ 21,但事实上 21 ^ 10 还是很大
 
 
然后就是当时楼下回复我的代码了。
 
把21分成10个数的和,分别表示某个结果所代表的数中 0 1 2...9 出现的次数比如 3 + 0 + 0 + ... + 18,表示 3个0,18个 9组成的数
 
如果18 * 9 ^ 21 = A ,A是21位整数 且 A中有 18个 9,3个 0,那么 A就是水仙花数
 
C(30)9 的数量级,远小于 21 ^ 10
 
 
我建议你先写出数组模拟大数运算的 加法 乘法,再写出第二种方案,最后写第三种
对的
2013-11-24 08:10
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:10 
用数组处理+1

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-11-24 10:02
快速回复:各位,求大数处理办法,请看题,
数据加载中...
 
   



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

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