编程变种水仙花数c语言

1)实现一个子函数用来判断输入的数是否是变异水仙花数
2)在主函数里输入数字n,在主函数里调用子函数判断输入的数是否是变异水仙花数 ,之后输出1~n (包括1和n)内的所有变异水仙花数(n最大为10亿)

变异水仙花数?是指4位数就是4次方,5位数就是5次方?

#include <stdio.h>
#include <math.h>
int sx(int n)
{
    int m = n;
    int k = 0;
    long long sum=0;
    while(m>0)
    {
        k++;
        m/=10;
    }
    
    for(int i=1;i<k;i++)
    {
        sum += (n/(int)pow(10.0,i)) * (n%(int)pow(10.0,i));
    }

    if(sum == n)
        return 1;
    return 0;
}

int main()
{
    int n,m;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        if(sx(i)==1)
            printf("%d ",i);
    }
    return 0;
}


int add(int m);
int main()
{
    int a, b;

    printf("请输入一个数:");
    scanf("%d", &a);
    // b = add(a);
    if (add(a))
        printf("%d是变种水仙花数\n", a);
    else
        printf("%d不是变种水仙花数\n", a);

    printf("输出1到%d中的变种水仙花数为:\n", a);
    for (int i = 1; i <= a; i++)
    {
        if (add(i))
            printf("%d ", i);
    }
}
int add(int m)
{
    int e = 10, f = 0;
    int len = 0, n;
    f = n = m;
    while (f)
    {
        f /= 10;
        len++;
    }

    while (n)
    {
        e = n % 10;
        f += pow(e, len);
        n /= 10;
    }
    return f == m;
}

博主参考一下下面链接

变种水仙花数和水仙花数(C语言)_魚崽的博客-CSDN博客_五位数中所有lily numberc语言 变种水仙花数描述变种水仙花数 (Lily Number):把任意的数字,从中间拆分成两个数字。比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个变种水仙花数。比如:655 = 6 * 55 + 65 * 51461 = 1*461 + 14*61 + 146*1题目:求出 5位数中的所有 Lily Number。(操作平台:windows Visual studio 2013 )代码如下:#i... https://blog.csdn.net/weixin_51062241/article/details/119358423?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%BC%96%E7%A8%8B%E5%8F%98%E7%A7%8D%E6%B0%B4%E4%BB%99%E8%8A%B1%E6%95%B0c%E8%AF%AD%E8%A8%80&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-0-119358423.nonecase&spm=1018.2226.3001.4450

【牛客基础编程题】——变种水仙花_蘼芜vodka的博客-CSDN博客 2021届的我也快要开始找工作了,深度学习做的我已经忘了C语言的编程,现在重新开始练习C语言编程吧~题目:代码:# include <stdio.h>int main(){ int n,pro1,pro2,pro3,pro4; for(n=10000;n<99999;n++){ pro1 = (n/10000) * (n-n/10000*10000); pro2 = (n/1000) * (n-n/1000*1000); https://blog.csdn.net/weixin_43917653/article/details/106342693?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166693450716800192230405%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166693450716800192230405&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-106342693-null-null.nonecase&utm_term=%E7%BC%96%E7%A8%8B%E5%8F%98%E7%A7%8D%E6%B0%B4%E4%BB%99%E8%8A%B1%E6%95%B0c%E8%AF%AD%E8%A8%80&spm=1018.2226.3001.4450


#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <math.h>
void  fun(int i)
{
    int a, b, c;
    a = i / 100;  /*取百位数*/
    b = i % 100/10;  /*取十位数*/
    c = i % 10;     /*取个位数*/
    if (i == pow(a, 3) + pow(b, 3) + pow(c, 3))
    {
        printf("%d=%d^3+%d^3+%d^3\n", i, a, b, c);
        printf("%d是水仙花数", i);
    }
    else
        printf("%d不是水仙花数", i);
}
void main()
{
    int a;
    printf("请输入一个三位数:");
    scanf("%d", &a);
    fun(a);
}

  • 建议你看下这篇博客👉 :c语言;水仙花数程序
  • 除此之外, 这篇博客: 【C语言编程--水仙花数II】中的 3. 判断是否为水仙花数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码如下:

    i = n % 10;  // 计算个位
    j = n / 10 % 10;  // 计算十位
    k = n / 100;  // 计算百位
    if (i * i * i + j * j * j + k * k * k == n)  // 根据水仙花数的定义判断
    {
    	printf("Yes\n");
    }
    else
    {
    	printf("No\n");
    }
    

#include<stdio.h>
int mypow(int a, int b){
    if(b==0){
        return 1;
    }
    int plus = 1;
    while(b>0){
        plus *= a;
        b--;
    }
    return plus;
}
int is_narcissus(int num){
    int tmp = num;
    int cs = 0;
    while(mypow(10, cs)<num){
        cs++;
    }
    int arr[cs];
    int index = cs-1;
    while(num>0){
        int data = num%10;
        num = num / 10;
        arr[index] = data;
        index--;
    }
    int res = 0;
    for(int i=0;i<cs-1;i++){
        // [1 ,4, 6, 2]
        int a = 0;
        int csa = 0;
        int left = i;
        int right = cs-1;
        int csb = 0;
        int b = 0;
        while(left>=0){
            a+= arr[left]*mypow(10, csa);
            left--;
            csa ++;
        }
        while(right>i){
            b+=arr[right]*mypow(10, csb);
            csb++;
            right--;
        }
        res += a*b;
    }
    if(res==tmp){
        return 1;
    }
    return 0;
}
int main(int argc, char const *argv[])
{
    int number;
    printf("enter a number:");
    scanf("%d", &number);
    int res = is_narcissus(number);
    switch (res)
    {
    case 0:
        printf("%d is not a narcissus\n", number);
        break;
    case 1:
        printf("%d is a narcissus\n", number);
    }
    for(int i=1;i<number+1;i++){
        int target = is_narcissus(i);
        if(target==1){
            printf("%d is a narcissus\n", i);
        }
    }
    return 0;
}

题主参考这个链接