求水仙数的条件只能是这样写了吗?i==(a*a*a+b*b*b+c*c*c)有没有精筒的

java131313 2011-01-21 11:52:23
如果30个a连乘不是累死了呀?i==a^3+b^3+c^3怎么就求不出来了呀?和i==(a*a*a+b*b*b+c*c*c)的结果不一样呀?
...全文
287 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
为什么你要用float型?

直接int不好吗?
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
你这道题目 这么写
float res = (float)pow(a,3)+(float)pow(b,3)+(float)pow(c,3);

if( fabs( res - i ) < 0.001 )
printf( .... );

[Quote=引用 9 楼 java131313 的回复:]

#include "stdafx.h"
#include"stdio.h"
#include"math.h"

/*int lc(int a,int n)
{
int i,result=1;
for(i=0;i<n;i++)
{
result *= a;
}
return result;
}*/
int _tmain(int argc, _TCHAR* argv[])……
[/Quote]
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
。。。。。
浮点类型 由于精度原因 不能用 == 比较的

你可以这么写

fabs( a - b ) < 0.001f
flysnowhite 2011-01-21
  • 打赏
  • 举报
回复
在C语言中,^表示异或,和Basic不一样,同时没有表示幂的运算符,如果要进行幂运算,必须调用函数pow(x,y),x、y及返回值均是double类型,且要包含#include <math.h>头文件。
所以直接采用i==a*a*a+b*b*b+c*c*c效率高。
java131313 2011-01-21
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include"stdio.h"
#include"math.h"

/*int lc(int a,int n)
{
int i,result=1;
for(i=0;i<n;i++)
{
result *= a;
}
return result;
}*/
int _tmain(int argc, _TCHAR* argv[])
{
float i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-100*a)/10;
c=i-100*a-10*b;
if((float)pow(a,3)+(float)pow(b,3)+(float)pow(c,3)==i)
printf("%d ",i);
}

return 0;
}
还是没什么输出呀
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
^是位运算 异或
java131313 2011-01-21
  • 打赏
  • 举报
回复
我看到MSDN有^运算符,但用上也不是我想要得到的结果呀!
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
可以用库函数
印象中是 Math.h中的 pow函数
java131313 2011-01-21
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include"stdio.h"

int lc(int a,int n)
{
int i,result=1;
for(i=0;i<n;i++)
{
result *= a;
}
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-100*a)/10;
c=i-100*a-10*b;
if(lc(a,3)+lc(b,3)+(c,3)==i)
printf("%d ",i);
}

return 0;
}
但还是得不到水仙花数。
masmaster 2011-01-21
  • 打赏
  • 举报
回复
写一个连乘的函数即可。
root@yeah ~
$ cat lc.c
#include <stdio.h>

int lc (int m,int n) {

int result=1,i;

for(i=1;i<=n;i++) {
result *= m;
}

return result;
}

int main (viod) {

int m,n;
int lc (int m,int n); //函数原型

printf ("Enter two digit:");
scanf ("%i %i",&m,&n);

printf ("%li",lc(m,n));

return 0;

}


测试:
root@yeah ~
$ ./lc
Enter two digit:2 10
1024
root@yeah ~
$ ./lc
Enter two digit:3 10
59049
root@yeah ~
$
java131313 2011-01-21
  • 打赏
  • 举报
回复
但是不对呀?
java131313 2011-01-21
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include"stdio.h"

int lc(int a,int n)
{
int i;
for(i=0;i<n;i++)
{
a*=a;
}
return a;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-100*a)/10;
c=i-100*a-10*b;
if(lc(a,3)+lc(b,3)+lc(c,3)==i)
printf("%d ",i);
}

return 0;
}
写了但什么也没输出呀。
一克代码 2011-01-21
  • 打赏
  • 举报
回复
把方法分割!

想写一个连乘的方法

再写个方法去调用!

这样速度会快点,而且看起来还明了
foidic137 2011-01-21
  • 打赏
  • 举报
回复
水仙数好像学过,忘了!!!!!!!!!!!
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
希望你好好研究下 float和int的区别。
再来做这道题目
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
。。。。。。。。。。。
看样子,你还是彻底没明白我再说什么。。。。
好吧,当我白说

至于 pow这块儿,你可以这么写

int res = (int)pow((float)a,3)+(int)pow((float)b,3)+(int)pow((float)c,3);
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
好吧,希望你真的明白了,呵呵
给分吧。
java131313 2011-01-21
  • 打赏
  • 举报
回复
原来的还是好呀。 但有更好的吗?
#include "stdafx.h"
#include"stdio.h"
#include"math.h"

/*int lc(int a,int n)
{
int i,result=1;
for(i=0;i<n;i++)
{
result *= a;
}
return result;
}*/
int _tmain(int argc, _TCHAR* argv[])
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-100*a)/10;
c=i-100*a-10*b;
//float res = (float)pow((float)a,3)+(float)pow((float)b,3)+(float)pow((float)c,3);
//fabs( res - i ) < 0.001
if(a*a*a+b*b*b+c*c*c==i)
printf("%d ",i);
}

return 0;
}
java131313 2011-01-21
  • 打赏
  • 举报
回复
输出 153 370 371 407
我改成功了,但越改越繁。本来要简单的
#include "stdafx.h"
#include"stdio.h"
#include"math.h"

/*int lc(int a,int n)
{
int i,result=1;
for(i=0;i<n;i++)
{
result *= a;
}
return result;
}*/
int _tmain(int argc, _TCHAR* argv[])
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-100*a)/10;
c=i-100*a-10*b;
float res = (float)pow((float)a,3)+(float)pow((float)b,3)+(float)pow((float)c,3);

if(fabs( res - i ) < 0.001)
printf("%d ",i);
}

return 0;
}
talentzxf 2011-01-21
  • 打赏
  • 举报
回复
LZ 结贴吧,如果你还看不懂,我就无语了
话说,从你的名字上看你是研究Java的,我告诉你下,Java基本上也是这样的做法。
加载更多回复(8)

70,028

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧