输出四叶玫瑰数的问题

四叶玫瑰数:一个四位数,它每一位数字的4次幂之和都等于它本身。

出现的问题:引发异常


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int length = 0;
    int sum = 0;
    int arr[4];
    for (int num = 1000; num < 10000; ++num)
    {
        while (num != 0)
        {
            arr[length++] = num % 10;
            num = num / 10;
        }
        for (int i = length - 1; i >= 0; i--)
        {
            sum+= pow(arr[i], 4);
        }
        if (sum == num)
        {
            printf("%d\n", num);
        }
    }
    system("pause");
    return 0;
}

img

-

int length = 0;
int arr[4];
for (int num = 1000; num < 10000; ++num)
    {
        while (num != 0)
        {
            arr[length++] = num % 10;
            num = num / 10;
        }
}

从你代码里摘出了这一部分,for循环从1000到10000,也就是从要循环9000次,length++要累加到9000,arr[4]数组元素只有4个,从arr[4]到arr[9000]都是超出范围的,必然异常

  1. 這个異常跟你所用的VS有關, 對比了codeblock的編譯, 是不會報這个異常的, 不建議使用在索引值中使用++運算;
  2. 你這个源碼問題很多:
    1.作爲冪和的sum不應該定義在for loop外, 不然for內sum不斷累加, 永遠無法得出正確結果;
    2.for loop內的num, 和sum類似的問題, 應該設置一个中間變量, 不然判斷的時候, num經過了num/10等運算, 結果只能是四位數的首位, 即1,2,3...

下面是我對你源碼的改動, 能正確運行, 作爲參考:

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

int main()
{
    int arr[4];

    for (int num = 1000; num < 10000; num++) //遍歷四位數
    {
        int sum=0;
        int num_temp = num;
        for(int i =0; i<4;i++)
        {
            arr[i] = num_temp % 10;
            num_temp = num_temp / 10;
        }

        for (int i = 0; i <4; i++)
        {
            sum+= pow(arr[i], 4);
        }

        if (sum == num)
        {
            printf("%d 是四葉玫瑰數!\n", num);
        }
    }

    return 0;
}

經過運行, 無誤:

img