陈落轩 发表于 2023-3-29 22:31:15

C语言水仙花数

求助,水仙花数的代码{:10_266:} 为什么会循环永远打印1{:10_266:}

#include <stdio.h>
#include <math.h>
void flower(int n);

int main(void) {
      int n;
      scanf("%d", &n);
      flower(n);
      return 0;
}

void flower(int n) {
      int i, j, k, sum, temp;
      for (i = pow(10, n - 1); i < pow(10, n); i ++) {
                sum = 0;
                k = i;
                temp = i;
                while (temp) {
                        j = temp % 10;
                        sum += pow(j, n);
                        temp = temp / 10;
                }
                if (sum == k) {
                        printf("%d\n", sum);
                }
      }
}

jhq999 发表于 2023-3-29 22:31:16

试试,用math.h里的pow,pow(5,3)=124,所以自己写了个整数幂
#include <stdio.h>
//#include <math.h>
void flower(int n);
int pow(int a,int n)
{
    if(0==n)return 1;
    return a*pow(a,n-1);
}
int main(void) {
      int n;
      scanf("%d", &n);
      flower(n);
      return 0;
}

void flower(int n) {
      int i, j, k, sum, temp;
      for (i = pow(10, n - 1); i < pow(10, n); i ++) {
                sum = 0;
                k = i;
                temp = i;
                while (temp) {
                        j = temp % 10;
                        sum += pow(j, n);
                        temp = temp / 10;
                }
                if (sum == k) {
                        printf("%d\n", sum);
                }
      }
}

陈落轩 发表于 2023-3-29 22:43:07

这里我想的是sum表示各个位数的和,j是最后一位数,temp、k是用来与i区分的,防止改变i的值

陈落轩 发表于 2023-3-30 14:01:21

jhq999 发表于 2023-3-29 23:22
试试,用math.h里的pow,pow(5,3)=124,所以自己写了个整数幂

!!!可以了,但请问大佬为什么<math.h>的pow运行速度这么慢而且还算不对呢?

jhq999 发表于 2023-3-30 15:26:03

陈落轩 发表于 2023-3-30 14:01
!!!可以了,但请问大佬为什么的pow运行速度这么慢而且还算不对呢?

慢不知道原因,不正确是因为它是浮点运算,强制转换后向下取整
页: [1]
查看完整版本: C语言水仙花数