浙大版《C语言程序设计(第4版)》题目集

习题5-6 使用函数输出水仙花数

题目背景

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如: 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33
。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

函数接口定义

int narcissistic( int number );
void PrintN( int m, int n );

函数 n a r c i s s i s t i c narcissistic narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数 P r i n t N PrintN PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。

裁判测试程序样例

#include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
    int m, n;

    scanf("%d %d", &m, &n);
    if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
    PrintN(m, n);
    if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例

153 400

输出样例

153 is a narcissistic number
370
371

代码

int narcissistic(int number)
{
    int cnt = 0, n, sum = 0, i, m = 0, factor = 1;
    //判断输入的数有多少位
    n = number;
    while(n!=0)
    {
        cnt++;
        n = n / 10;//减少一位
    }
    n = number;
    //求各位数字幂次积之和
    while(n!=0)//求幂次积之和
    {
        m = n % 10;
        for (i = 0; i < cnt;i++)//求幂次积
        {
            factor *= m;
        }
        sum += factor;//求和
        n = n / 10;
        factor = 1;//初始化factor(因为factor要参与循环,且每次需从1开始)
    }
    //判断是否满足水仙花数的条件
    if(sum==number)
    {
        return 1;
    }
    else 
    {
        return 0;
    }
}

void PrintN( int m, int n )
{
    int j;
    for (j = m+1; j < n;j++)
    //注意区间端点j:从m+1开始(因为m已经判断过了,从m后一位开始判断),到n前一位停止(因为main函数还需在对n进行一次判断)
    {
        //打印水仙花数
        if(narcissistic(j))
        {
            printf("%d\n", j);
        } 
    }
}

总结与反思

  • 如何求一个数字有多少位。
  • 如何求一个数字的幂次积(在不引用 p o w ( ) pow() pow函数情况下)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值