69,371
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <math.h>
#include <cstdio>
int main()
{
int n, i, N, sum;
sum = 0;
printf("请输入位数[3,7]: ");
scanf_s("%d",&n);
if (n<3 || n > 7)
{
printf("输入数据不符合要求,请重新输入");
scanf_s("%d", &n);
}
switch (n)
{
case 3: N = 100;
break;
case 4: N = 1000;
break;
case 5: N = 10000;
break;
case 6: N = 100000;
break;
case 7: N = 1000000;
break;
default:
break;
}
// 分配空间,存储各个位置上的数字
int *Ptr = NULL;
Ptr = (int *)malloc(n * sizeof(int));
for (i = N; i < N * 10; ++i)
{
// 初始化各个位置上的数字为0
for (size_t j = 0; j < n; j++)
{
Ptr[j] = 0;
}
// 计算各个位置上的数字
for (int j = n-1; j >= 0; j--)
{
int sum_temp = 0;
for (int k = n-1; k > j; k--)
{
sum_temp += pow(10, k)*Ptr[k];
}
Ptr[j] = (i - sum_temp) / pow(10,j);
}
// 计算和
sum = 0;
for (size_t j = 0; j < n; j++)
{
sum += Ptr[j] * Ptr[j] * Ptr[j];
}
// 比较,是否为水仙花数
if (sum==i)
{
printf("当前水仙花数是: %8d\n ", i);
}
}
free(Ptr);
std::cin.get();
return 0;