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;
}
#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);
}
代码如下:
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;
}
题主参考这个链接