列表

详情


BC164. 牛牛的四叶玫瑰数

描述

牛牛最近学了水仙花数,但是他并不喜欢水仙花,因此他准备算出 [l,r] 区间内的四叶玫瑰数。
四叶玫瑰数:一个数的四个位置的数字的四次方加起来等于这个四位数本身的数。

输入描述

第一行输入两个正整数,表示闭区间的两头 

输出描述

输出区间内的四叶玫瑰数,保证至少有一个

示例1

输入:

1 2000

输出:

1 1634

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 288KB, 提交时间: 2022-05-12

#include<stdio.h>
#define fun(x) x*x*x*x
int Four(int i)
{    
    int sum =0,num=i;
    while(i)
    {
        int a=i%10;
        sum+=fun(a);
        i/=10;
    }
    if(sum==num)
        return 1;
    else
        return 0;
    
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=n;i<=m;i++)
    {
        if(Four(i)==1)
            printf("%d ",i);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2022-08-06

#include <stdio.h>

int main()
{
	int l, r;
	int i, n;
	int a;
	int s;
	while (scanf("%d%d", &l, &r) != EOF)
	{
		for (i = l; i <= r; i++)
		{
			s = 0;
			n = i;
			while (n)
			{
				a = n % 10;
				s = s + a * a * a * a;
				n /= 10;
			}
			if (s == i)
			{
				printf("%d ", s);
			}
		}
		printf("\n");
	}
	return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2022-07-20

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    for(;a<=b;a++)
    {
        int i=a;
        int sum=0;
        while(i)
        {
            sum +=(i%10)*(i%10)*(i%10)*(i%10);
            i/=10;
        }
        if(sum == a)
            printf("%d ",a);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2022-07-18

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>

//int cmp(const void *e1, const void *e2)
//{
//    return *((int*)e1)-*((int*)e2);
//}
//
//
//int Add(int x,int y)
//{
//    return x+y;
//}
//int Sub(int x,int y)
//{
//    return x-y;
//}
//int Mul(int x,int y)
//{
//    return x*y;
//}
//int Div(int x,int y)
//{
//    return x/y;
//}

int find(int a)
{
    int c[4]={0},i=0,m,n,sum=0;
    n=a;
    for(i=0;i<4;i++)
    {
        m=a%10;
        c[i]=m*m*m*m;
        a=a/10;
        sum+=c[i];
    }
    if(sum==n)
    {
        return 1;

    }
    else
    {
        return 0;
    }



}

int main()
{
    int a, b, c,i=0, j, sum = 0,min=0,result=0,index=0,cyc=0,sum1=0;
    scanf("%d %d",&a,&b);

    for(i=a;i<=b;i++)
    {
        result= find(i);
        if(result==1)
        {
            printf("%d ",i);
        }
    }




   return 0;

}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2022-05-03

#include <stdio.h>
int pow(int x,int n)
{
    int i,sum=1;
    for (i=0;i<n;i++)
    {
        sum*=x;
    }
    return sum;
}
int main(void)
{
    int m,f,i,x;
    scanf("%d %d",&m,&f);
    //保存x的原始值
	for (x=m;x<=f;x++)
	{
	    int sum=0;
	    //int sum=0不能放在最开始,如果这样sum就成为全局变量,每次循环结束后都不能清除为sum开辟的内存空间
	    //而最初目的是计算每一个数的时候,都要将sum初始化为0,因此需要将对sum的定义和声明放在for循环内部
		i=x; //保留原来变量的值,定义一个新变量进行操作
		while (i)
       {
           int ret=i%10;
            i/=10;
           sum=sum+pow(ret,4);
        }
        if (sum==x)
       {
           printf("%d ",x);
       }

	}
    return 0;
}

上一题