四叶玫瑰数:一个四位数,它每一位数字的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;
}
-
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]都是超出范围的,必然异常
下面是我對你源碼的改動, 能正確運行, 作爲參考:
#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;
}
經過運行, 無誤: