注册 登录
编程论坛 C语言论坛

c语言求水仙花数

Z1020 发布于 2020-01-09 23:39, 5721 次点击
【问题描述】

输入2 个正整数m 和n(1≤m,n≤1000),输出m~n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。要求定义并调用函数is(number)判断number的各位数字之立方和是否等于其自身。

【输入形式】

输入2个正整数m 和n(1≤m,n≤1000)

【输入输出样例1】(下划线部分表示输入)

Input m: 100

Input n: 400

153

370

371
我的代码:
#include<stdio.h>
int a(int i)
{
    int sum;
    sum=(i/100)*(i/100)*(i/100)+(i%100/10)*(i%100/10)*(i%100/10)+(i%10)*(i%10)*(i%10);
    if(sum==i)
        return 1;
}
int main()
{
    int m,n,i;
    scanf("%d%d",&m,&n);
    printf("Input m: Input n:");
    for(i=m;i<=n;i++)
        if(a(i)==1)
            printf("%d\n",i);
    return 0;
}
每次输出时总会多出一些10,100等是十的倍数的数...思考良久仍无解决办法,望解答。
26 回复
#2
叶纤2020-01-09 23:53
论坛有很多一样的题,你可以看看。。。我数学不好,没看懂题目。还有为什么要数花啊,现实中不是一盆一盆的送吗,,,
#3
Z10202020-01-09 23:59
回复 2楼 叶纤
哈哈哈哈哈哈哈哈你怎么这么可爱啊,还是谢谢你哈哈哈哈哈
#4
叶纤2020-01-10 00:00
还有你输出了什么得到了什么结果啊?
#5
Z10202020-01-10 00:03
回复 4楼 叶纤
多了一个100...
#6
叶纤2020-01-10 00:05
只有本站会员才能查看附件,请 登录
#7
Z10202020-01-10 00:13
回复 6楼 叶纤
只有本站会员才能查看附件,请 登录
这就尴尬了...我用devc++编出来就多了100。。。,不管怎样,至少证明我编对了吧哈哈哈,thank you very much
#8
lidepeng19952020-01-10 00:18
回复 7楼 Z1020
emmm我在想为什么你那个会出现这种情况,现在大佬都睡觉了,明天看看有大佬回答你的问题吗
#9
太守2020-01-10 00:20
虽然我没有找出问题来,,但是我觉得你printf应该写在scanf前面,不然你输入的时候是看不到这句的
#10
叶纤2020-01-10 00:57
回复 楼主 Z1020
我看看我能换种方式写你这题吗
#11
叶纤2020-01-10 02:02
以下是引用叶纤在2020-1-10 00:57:57的发言:

我看看我能换种方式写你这题吗

因为我不怎么懂c的输入输出耗费了很长时间
以下是我的代码如果结果还是多一个100的话那就是你的编译器的问题了
方法一!!!!
#include<stdio.h>
int main (void)
{   int sum,m,a, n;
 printf("Input m: Input n:");
  scanf("%d%d",&m,&n);
     for(int i=m;i<=n;++i,++m)
     {     sum=(m/100)*(m/100)*(m/100)+(m%100/10)*(m%100/10)*(m%100/10)+(m%10)*(m%10)*(m%10);
           if(sum == m)
           { printf("%d\n",sum);
           }
     }
}

方法二!!!
#include<stdio.h>
int a(int m,int n)
{
    int sum;
     for(int i=m;i<=n;++i,++m)
     {     sum=(m/100)*(m/100)*(m/100)+(m%100/10)*(m%100/10)*(m%100/10)+(m%10)*(m%10)*(m%10);
           if(sum == m)
           { printf("%d\n",sum);
           }
     }return 0;
}
int main()
{
    int m;
int n;
    printf("Input m: Input n:");
    scanf("%d%d",&m,&n);
    a(m,n);
    return 0;
}
   



[此贴子已经被作者于2020-1-11 11:14编辑过]

#12
吕孟伟2020-01-10 08:45
#include<stdio.h>

int fun(int i) {
    int sum = 0; //各位数字立方和
    int temp;//存储各位数字
    int val = i; //先将i值存储到val,等下和立方和比较
    while(i) {
        temp = i % 10;
        sum += temp*temp*temp;
        i /= 10;
    }
    if(val==sum) {
        return 1;
    } else {
        return -1;
    }

}
int main(void) {
    int m,n,i;
    printf("Input m:");
    scanf("%d",&m);
    printf("Input n:");
    scanf("%d",&n);
    for(i=m; i<=n; ++i) {

        if(1 == fun(i)) {
            printf("%d\n",i);
        }
    }
    return 0;
}
输入输出:
Input m:100
Input n:400
153
370
371
#13
rjsp2020-01-10 09:23
以下是引用Z1020在2020-1-9 23:39:36的发言:

int a(int i)
{
    int sum;
    sum=(i/100)*(i/100)*(i/100)+(i%100/10)*(i%100/10)*(i%100/10)+(i%10)*(i%10)*(i%10);
    if(sum==i)
        return 1;
}
像这种明显错误的代码,难道你的编译器不给个错误或警告?!
例如 warning: control reaches end of non-void function [-Wreturn-type]
或 warning C4715: 'a' : not all control paths return a value
#14
叶纤2020-01-10 12:24
回复楼上,楼上版主大大的回答简直就是上帝,要不新手就很容易跟着楼主的写法走了,(我的几个编译器加在线翻译工具都通过了楼主的代码)真的很让人怀疑写法,a函数里的return 1到底是返回给sum,还是a?如果返回sum那么main函数里没有sum,压根不是一个空间的,如果1返回给a,a(i)里的i又在main中不明确那a(i)不应该是1吗?等等的疑问真的很困惑人,版主大大这一指明,简直就是上帝之光
#15
Z10202020-01-10 20:44
回复 11楼 叶纤
此等好学之心实在令我敬佩!已测试,代码正确,算出来也没有多什么。非常感谢小姐姐的热心回答!今天晚上早点睡哟!
#16
Z10202020-01-10 20:49
回复 13楼 rjsp
版主大大好!我已经明白了你的意思,但是我的编译器确实没有警告或者错误,并且我的教科书上写的是return可以返回表达式,表达式就是常量,变量和式子吧...附上书上的一个例子
只有本站会员才能查看附件,请 登录
,不知道我是不是理解错了你的意思,谢谢大大,还望继续指教。
#17
Z10202020-01-10 20:51
回复 12楼 吕孟伟
感谢!原来循环还可以这么写!
#18
Z10202020-01-10 20:53
回复 9楼 太守
对!怪我英语不好,没看出来这是提示输出的意思...感谢!
#19
Z10202020-01-10 20:53
回复 8楼 lidepeng1995
哈哈哈哈哈要得
#20
forever742020-01-10 21:14

明白啥了就明白了
R斑快回来把话说清楚
#21
叶纤2020-01-10 21:57
额。。。我看到这种教材会崩溃的,话咋只说了一半,就相当于
小明你吃了什么?
小明答  我吃了吃了。。。
你书上的例子怎么没有主函数啊😱,我是把参数比做吃的过程
main函数比做要吃的菜,光知道怎么吃,菜呢?😱
#22
bcbbcclbbc2020-01-11 03:51
建议先理解一下 r版主说的这个错误代码的意思,再下结论。

以下是引用rjsp在2020-1-10 09:23:31的发言:

像这种明显错误的代码,难道你的编译器不给个错误或警告?!
例如 warning: control reaches end of non-void function [-Wreturn-type]
或 warning C4715: 'a' : not all control paths return a value


因为函数a(一个有返回值的函数)只有在if为真才会执行return语句,而if为假则不会执行return语句,此时函数则没有返回值。
正常情况应该需要在函数a末尾加一个return语句。
#23
Z10202020-01-11 08:15
回复 21楼 叶纤
hahahahah....书上的那个例子没有main函数.....多谢你的帮助。我明白了,我理解错了版主的意思。。。多谢。
#24
Z10202020-01-11 08:16
回复 22楼 bcbbcclbbc
谢谢谢谢,已懂。
#25
Z10202020-01-11 08:17
回复 13楼 rjsp
我明白了!我太傻了!谢谢谢谢!
#26
Z10202020-01-11 08:18
回复 20楼 forever74
已懂,谢谢谢谢!
#27
叶纤2020-01-11 11:59
以下是引用Z1020在2020-1-11 08:15:43的发言:

hahahahah....书上的那个例子没有main函数.....多谢你的帮助。我明白了,我理解错了版主的意思。。。多谢。

你理解的好快,我看到现在,查找了一些资料才初步理解。我的也是错误的,也是无效末尾,,刚刚改正,我也送你花花吧
1