作者:北京城市环境监督主力军 | 来源:互联网 | 2023-10-12 12:01
一个数的各个位上的数字的n次方的和等于它本身,这个数就叫水仙花数例如n3时,153,370就是两个符合条件的数,因为1531^3+5^3+3^3问题,输入n,输出符合条件的所有的解,比
一个数的各个位上的数字的n次方的和等于它本身,这个数就叫水仙花数
例如n=3时,153,370就是两个符合条件的数,因为153=1^3+5^3+3^3
问题,输入n,输出符合条件的所有的解,比如n=11时,有:
32164049650
32164049651
40028394225
42678290603
44708635679
49388550606
82693916578
94204591914
共8个解
这个题应该怎么做?
如果可以的话,大家写一下代码吧
96 个解决方案
五楼的..可否解释一下...每行加点注释..有的小弟看不太懂
问题,输入n,输出符合条件的所有的解,比如n=11时,有
----------------
按照lz的要求n随意,这个题目就有难度了,起码就要考虑大数的问题
sum+=pow(factor[i],weishu);
主要是不懂这个是干嘛的..pow.
8楼的你把你的代码试试改成计算当n=9的时候,有哪些解?
10位,11位呢?试过没?
本来这个题目的思路还是比较简单的
可是当n比较大的时候似乎很难了
如何计算i的n次方问题是关键了!
请高手来解答!
我在turboc 2.0下运行,
m不能输入太大了
unsigned long int 才32位
#include
using namespace std;
long chengji(int x, int y);
void main()
{
int n,j,u=0,a;
unsigned long i,d,t,l;
cout<<"请输入你要的水仙花数的位数n:";
cin>>n;
cout< l=chengji(10,n-1);
for(i=l;i<10*l;i++)
{
t=0;
d=i;
for(j=1;j<=n;j++)
{
a=d%10;
t=t+chengji(a,n);
d=d/10;
}
if(t==i)
{
cout< }
}
}
long chengji(int x,int y)
{
long k,t=1;
for(k=1;k<=y;k++)
t*=x;
return(t);
}
说实话,这个程序不太好,原因有两个:
一、unsigned long 的范围是0~4294967295
所以在编写时,我不知道该怎样扩大整数范围。
所以在你输入11时(11位数字),不能表示出来,只能表示10以内的数。
二、频繁的使用函数会使效率低下,这里就是这个问题,特别是输入6~9时。
我是一个刚学c++的,知道程序编写的不太好,不过还是想向各位高手请教一下!^^
你自己运行看看啊
我这个方式很直接,一个一个的找,看符合不
long long最高可以算17位的水仙花数
不过关键问题是,你需要花多少时间
正如楼上所说
假如像前面某人,8位数用20分钟,那么
10位数就要用2000分钟(或者更多),就是一天多
那11位是不是要15天??
把n个位分配n个空间,用数组存放。不知道行不行。高手来试一下。
看过一个大数四则运算的程序,能对100位以内的数进行加减乘除。用的就是这种方法。
我的程序可以1s内算出19位的全部解,但当然不代表我的就是答案,
我也想我的程序能运行得更快一些,我想找出n<60的全部解
不怎么会...涉及算法和效率问题....
另...好象不是什么新手问题吧....呵呵
MARK下,等LZ的程序再说
当然我只是凭印象自己写的,想想还可以这样
if((two&(somting||(someting-1)))==0)
break;
来减少循环次数,每次做POWER最多是32次的效果.
恩,就是这样了吧
这样啊。。。那你不如把思路说说,共同进步啊。。。
不然我们做这么多连你的程度都没有的话。。。哈哈,就搞笑了
个人意见而已....仅仅是参考
如果POWER对你而言是可以避免的,我冒昧地问下,那么你面对的是增量问题吗?对于下一个水仙花数出现的预测问题?
比如我如何直接从153这个水仙花数得到下一个水仙花数的位置.