首页 > 试题广场 >

变种水仙花

[编程题]变种水仙花
  • 热度指数:68611 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。

例如:

655 = 6 * 55 + 65 * 5

1461 = 1*461 + 14*61 + 146*1

求出 5位数中的所有 Lily Number。


输入描述:


输出描述:
一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。
#include <stdio.h>

int main()
{
    for (int i = 10000; i < 100000; i++)
    {
        int a = (i / 10) * (i % 10); // 得到  1234 * 5
        int b = (i / 100) * (i % 100); // 得到 123 * 45
        int c = (i / 1000) * (i % 1000); // 得到 12 * 345
        int d = (i / 10000) * (i % 10000);// 得到 1 * 2345
        int sum = a + b + c + d;
        if (sum == i)
        {
            printf("%d ", i);
        }
    }
    return 0;
}
发表于 2025-06-17 21:52:04 回复(0)
#include 
int isLily(int x)       //判断是不是水仙花数
{
    int flag = 0;
    int lily = 0;
    int i = 1;
    for(i = 10;i<=10000;i*=10)      //每次操作数i乘10,达到不同位数的拆分
    {
        lily = (x/i)*(x%i)+lily;    //累加
    }
    flag = lily == x?1:0;   //如果算得结果等于形参,说明满足条件,flag为真,反之为假
    return flag;
}
int main() {
    int i = 0;
    for(i = 10000;i<=99999;i++) //遍历所有五位数
    {
        if(isLily(i) == 1)      //如果是水仙花数,打印
        printf("%d ",i);
    }
    return 0;
}
发表于 2025-05-19 19:02:02 回复(0)
#include <stdio.h>
int is_Lily(int a)
{
    int b = a / 10000;
    int c = a % 10000;
    int d = a / 1000;
    int e = a % 1000;
    int f = a / 100;
    int j = a % 100;
    int h = a / 10;
    int m = a % 10;
    int t = a / 1;
    int  l = a % 1;
   
    if ((b * c + d * e + f * j + h * m + t * l ) == a)
    {
        return 1;
    }
    else
    {
        return 0;
    }

}
int main() {
    int a = 10000;
for (a = 10000; a <= 99999; a++)
{
    int r = is_Lily(a);
    if (r == 1)
    {
        printf("%d ", a);
    }
   
}

   
    return 0;
}
学了这么久还是写出如此rj的代码,我怕是没救了哈哈哈
发表于 2025-03-09 13:44:47 回复(0)
#include <stdio.h>

int main() {
    for (int i=10000; i<=99999; i++) {
       int sum=0;
       for(int j=10 ; j<=10000; j=j*10){
        sum+=(i/j)*(i%j);
       }
       if (sum==i) {
         printf("%d ",i);
       }
    }
    return 0;
}
发表于 2025-02-28 22:41:30 回复(0)
#include <stdio.h>
// 12345
int main() {
    for(int i=10000;i<=99999;i++)
    {   long sum=0;
        int base=10000;
        for(int count=0;count<4;count++)
        {
            sum+=(i/base)*(i%base);
            base/=10;
        }
        if(i==sum)
        {  
            printf("%ld ",sum);
        }
    }
    return 0;
}
发表于 2025-02-10 15:14:08 回复(0)
#include <stdio.h>

int main() {
 
 
    for (int k = 10000;k < 100000;k++) {    
        int i = 0;
        int j = 10;
        while (k / j != 0) {
            i = i + (k % j) * (k / j);
            j = j * 10;
        }
        if (i == k) {
            printf("%d ", k);
        }
    }

    return 0;
}
发表于 2025-01-14 00:43:07 回复(0)
#include<stdio.h>
#include<math.h>

int main()
{
   int x = 0;
   int i = 0;
   double j = 0;
   int left = 0;
   int right = 0;
   int sum = 0;
   double cal = 0.0;
   for(i=10000;i<99999;i++)
   {
      sum = 0;
      for(j=1.0;j<5.0;j++)
      {
        cal = 0;
        cal = pow(10,j);
        left= i / cal;
        right = i - (left*cal);
        sum = sum +  left * right;
      }
      if(sum == i)
      {
        printf("%d ",i);
      }
   }

    return 0;
}

发表于 2024-12-12 15:22:47 回复(0)
#include <stdio.h>

int main() {
    int a = 0, b = 0;
    for (a = 10000; a < 100000; a++) {
        b = (a % 10) * (a / 10) + (a % 100) * (a / 100) + (a % 1000) * (a / 1000) +
            (a % 10000) * (a / 10000);
        if (a == b) {
            printf("%d ", a);
        }
    }
    return 0;
}
发表于 2024-12-01 11:23:26 回复(0)
#include <stdio.h>
#include <math.h>
int main() {
    int sum = 0;

    // 遍历所有五位数
    for (int i = 10000; i <= 99999; i++) {
        sum = 0;  // 每次计算一个新数字时,清零sum
       
        // 遍历不同的拆分方式
        for (int j = 1; j < 5; j++) {
            // n 是左边的部分,p 是右边的部分
            int n = i / (int)pow(10, j);  // 获取左边的部分
            int p = i % (int)pow(10, j);  // 获取右边的部分
           
            sum += n * p;  // 将n和p的乘积累加到sum
        }
       
        // 判断是否为Lily Number
        if (sum == i) {
            printf("%d ", i);  // 输出符合条件的Lily Number
        }
    }
    return 0;
}

发表于 2024-11-27 21:51:33 回复(0)
#include <stdio.h>

int main() {
int a,b,c,d,e;
int i;
for(i=10000;i<100000;i++)
{
    a=i/10000;//个
    b=i/1000;//前两位
    c=i/100;//前3位
    d=i/10;//前4位
    e=i%10;//最后一位
    if((a*(i%10000)+b*(i%1000)+c*(i%100)+d*e)==i)
    printf("%d ",i);
}

    return 0;
}
发表于 2024-09-15 22:42:32 回复(0)
想知道哪里错了

#include <stdio.h>

int main() {
    int b,c,d,e,f,g;
    for (int a=10000; a<=99999; a++) {
        b=a/10000;//万位
        c=a/1000%10;//千位
        d=a/100%10;//百位
        e=a/10%10;//十位
        f=a%10;//个位
        g=(b*(c*1000+d*100+e*10+f))+((b*10000+c*1000)*(d*100+e*10+f))+((b*10000+c*1000+d*100)*(e*10+f))+((b*10000+c*1000+d*100+e*10)*f);
        if (g==a) {
            printf("%d ",a);
        }
    }
    return 0;
}
发表于 2024-09-12 11:51:35 回复(1)
#include <stdio.h>
//递归,可以更高位数
int is_prime(int x,int y)
{
    if(x/y != 0)
    {
        return is_prime(x,y*10)+(x/y)*(x%y);
    }
    else
    	return 0;
}

int main()
{
    int i = 0;

    for(i = 10000; i <= 99999; i++)
    {
        if(is_prime(i,10) == i)
        {
            printf("%d ",i);
        }
    }

    return 0;
}

发表于 2024-08-09 13:23:37 回复(0)
#include <stdio.h>

int shicf(int x)
{
    if(x==0)
    {
        return 1;
    }
    if(x>0)
    {
        return 10*shicf(x-1);
    }
}

int Lily(int x)
{
    int arr[8]={0};
    int j=4;
    int sum=0;
    for(int i=0;i<4;i++)
    {
        arr[i]=x/shicf(j);
        arr[7-i]=x%shicf(j);
        j--;
    }
    for(int i=0;i<4;i++)
    {
        sum+=(arr[i]*arr[7-i]);
    }
    if(sum==x)
    {
        return 1;
    }
    else {
    return 0;
    }
}


int main() {
    for(int i=10000;i<100000;i++)
    {
        if(Lily(i)==1)
        {
            printf("%d ",i);
        }
    }
    return 0;
}
发表于 2024-07-23 23:09:12 回复(0)
#include <stdio.h>
#include<math.h>
int main() {
    for(int i=10000; i<100000; i++)
    {
        int j=0;
        int cmp=i;
        int sum=0;
        int tmp=0;
        for(j; j<=4; j++)
        {  
            tmp=tmp+(i%10)*pow(10,j);
            i=i/10;
            sum=sum+i*tmp;
            if(sum>cmp)
                break;
        }
        if(cmp==sum)
        {
            printf("%d ",cmp);
        }
        i=cmp;
    }
    return 0;
}
发表于 2024-06-02 10:32:58 回复(0)
#include<stdio.h>  int count(int i){ int num1,num2,num3,num4,res;  num1=(i%10)*(i/10);  num2=(i%100)*(i/100);  num3=(i%1000)*(i/1000);  num4=(i%10000)*(i/10000);  res=num1+num2+num3+num4;  return res; } int main() { for(int i=10000;i<=99999;i++){ if(i==count(i)){
           printf("%d ",i);  }
   } return 0; }

发表于 2024-05-31 10:51:42 回复(0)