小白求救,谢谢大佬

这个ID、很流弊 2019-03-24 01:11:08
(求水仙花数)为什么不能运行结果
...全文
119 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
coo135 2019-03-24
  • 打赏
  • 举报
回复
1:sum需要重置,应该放在for循环中; 2:a=a/10; b=a%10; 这样的结果就是少了一位了~~,这两句只要更换一下顺序就可以了。
coo135 2019-03-24
  • 打赏
  • 举报
回复
大致没问题,如下修改。
刘蕘 2019-03-24
  • 打赏
  • 举报
回复
引用 9 楼 qq_44790116的回复:
[quote=引用 8 楼 qq_38834405的回复:][quote=引用 7 楼 qq_44790116 的回复:] [quote=引用 5 楼 qq_38834405的回复:]水仙花数是指一个 3 位数,你n=4到7要干嘛。。而且int类型也放不下这么大的数字(因为你后面要次方),你把你的while里面a和b 的赋值顺序交换一下就行了
书上的题目这么要求的[/quote]你把题目拍一下,你的算法没问题,就是a,b赋值顺序错了。水仙花数真真是指一个 3 位数。。[/quote] 我加你QQ吧,这好像不能拍照[/quote] Q 469704848
  • 打赏
  • 举报
回复
引用 8 楼 qq_38834405的回复:
[quote=引用 7 楼 qq_44790116 的回复:] [quote=引用 5 楼 qq_38834405的回复:]水仙花数是指一个 3 位数,你n=4到7要干嘛。。而且int类型也放不下这么大的数字(因为你后面要次方),你把你的while里面a和b 的赋值顺序交换一下就行了
书上的题目这么要求的[/quote]你把题目拍一下,你的算法没问题,就是a,b赋值顺序错了。水仙花数真真是指一个 3 位数。。[/quote] 我加你QQ吧,这好像不能拍照
刘蕘 2019-03-24
  • 打赏
  • 举报
回复
引用 7 楼 qq_44790116 的回复:
[quote=引用 5 楼 qq_38834405的回复:]水仙花数是指一个 3 位数,你n=4到7要干嘛。。而且int类型也放不下这么大的数字(因为你后面要次方),你把你的while里面a和b 的赋值顺序交换一下就行了
书上的题目这么要求的[/quote]你把题目拍一下,你的算法没问题,就是a,b赋值顺序错了。水仙花数真真是指一个 3 位数。。
  • 打赏
  • 举报
回复
引用 5 楼 qq_38834405的回复:
水仙花数是指一个 3 位数,你n=4到7要干嘛。。而且int类型也放不下这么大的数字(因为你后面要次方),你把你的while里面a和b 的赋值顺序交换一下就行了
书上的题目这么要求的
kobe0818 2019-03-24
  • 打赏
  • 举报
回复

#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;
刘蕘 2019-03-24
  • 打赏
  • 举报
回复
水仙花数是指一个 3 位数,你n=4到7要干嘛。。而且int类型也放不下这么大的数字(因为你后面要次方),你把你的while里面a和b 的赋值顺序交换一下就行了
  • 打赏
  • 举报
回复
引用 1 楼 qq_38834405的回复:
sum需要重置,sum=0放for里面。
而且输出的数还有不是水仙花数的
  • 打赏
  • 举报
回复
引用 1 楼 qq_38834405的回复:
sum需要重置,sum=0放for里面。
改过来了,可是还是输不出全部符合情况的水仙花数,只输出了一个
  • 打赏
  • 举报
回复
改过来了,可是还是输不出全部符合情况的水仙花数,只输出了一个
刘蕘 2019-03-24
  • 打赏
  • 举报
回复
sum需要重置,sum=0放for里面。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧