c语言求救:输出的时候少一个数

唯独你没懂wdnmd 2020-11-21 06:38:52
输出结果少第一个数字
/*一个n位正整数如果等于它的n个数字的n次方和,该数称为n位自方幂数。设计求3~6位自方幂数。
**输出格式要求:"%d位自幂数有:" "%ld\t" "\n" (每位完后换行)
程序运行示例如下:
3位自幂数有:153 370 371 407
4位自幂数有:1634 8208 9474
5位自幂数有:54748 92727 93084
6位自幂数有:548834*/
#include<stdio.h>
#include<math.h>
int hhh(int n)
{
long a[10], i, j, x, y, t, sum=0;
x=pow(10, n-1);
y=pow(10, n);
for(i=x;i<y;i++)
{
t=i;
for(j=0;j<n;j++)
{
a[j]=t%10;
t=t/10;
}
for(j=0;j<n;j++)
{
sum+=pow(a[j], n);
}
if(sum==i)
{
printf("%ld\t", sum);
}
sum=0;
}
}
int main(void)
{
int i;
for(i=3;i<=6;i++)
{
printf("%d位自幂数有:", i);
hhh(i);
printf("\n");
}
}

运行结果是这样的:
...全文
964 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
Poekiii 2021-03-04
  • 打赏
  • 举报
回复
sum+=(int)round(pow(a[j],n)); 加个round四舍五入再取整试试 好像是因为精度误差
qzjhjxj 2020-11-22
  • 打赏
  • 举报
回复
你把数组a[10]={0};赋初值再试试。
  • 打赏
  • 举报
回复
引用 1 楼 m0_51355118 的回复:
没错啊,你的运行结果是什么
少第一个数
qzjhjxj 2020-11-22
  • 打赏
  • 举报
回复
可以这样改下,看看问题在哪:
int hhh(int n)
{
    long a[10]={0}, i, j, x, y, t, sum;
    x=pow(10, n-1);
    y=pow(10, n);
    //printf("X=%d,Y=%d\n",x,y);  
    for(i=x;i<y;i++)
    {
        printf("i=%d\n",i);//这里加一句打印出i
        t=i;
        sum=0;
        for(j=0;j<n;j++)
        {
            a[j]=t%10;
            t=t/10;
        }
        for(j=0;j<n;j++)
        {
            sum+=pow(a[j],n);
            printf("sum+第(%d)次=%d\n",j,sum);//这里看看sum的值
            system("pause");  //这里暂停下看的清楚
        }
        if(sum==i)
        {
            printf("%ld \t",sum);
        }
    }
}
实际效果,如下图:
  • 打赏
  • 举报
回复
引用 9 楼 qzjhjxj 的回复:
引用
printf("x=d%,y=%d\",x,y);//这里增加看看x y 的值。或者干脆 x=150,y=155赋值,看看下面能不能输出153.
这句打错了,应该这样的:
printf("X=%d,Y=%d\n",x,y);

还是不可以,就153输出不了,把y=999之后,还是153出不来,只输出其他三个。
qzjhjxj 2020-11-22
  • 打赏
  • 举报
回复
引用
printf("x=d%,y=%d\",x,y);//这里增加看看x y 的值。或者干脆 x=150,y=155赋值,看看下面能不能输出153.
这句打错了,应该这样的:
printf("X=%d,Y=%d\n",x,y);
qzjhjxj 2020-11-22
  • 打赏
  • 举报
回复
你可以把int hhh(int n)函数单独拿出来,在你的机器上单独调试下,
int hhh(int n)
{
    long a[10], i, j, x, y, t, sum;
    x=pow(10, n-1);
    y=pow(10, n);
    printf("x=d%,y=%d\",x,y);//这里增加看看x y 的值。或者干脆 x=150,y=155赋值,看看下面能不能输出153.
    for(i=x;i<y;i++)
    {
        t=i;
        sum=0;//把sum赋初值放在这里
        for(j=0;j<n;j++)
        {
            a[j]=t%10;
            t=t/10;
        }
        for(j=0;j<n;j++)
        {
            sum+=pow(a[j],n);
        }
        if(sum==i)
        {
            printf("%ld \t",sum);// “%ld\t"在间加入一空格.
        }
    }
}
  • 打赏
  • 举报
回复
引用 6 楼 qzjhjxj 的回复:
你把数组a[10]={0};赋初值再试试。
还是不行
  • 打赏
  • 举报
回复
我刚刚在另一个电脑上运行了一下,是正确的, 但是在我的电脑上就是少一个数字
  • 打赏
  • 举报
回复

我的还是少一个数。。。不知道为什么。。。
qzjhjxj 2020-11-21
  • 打赏
  • 举报
回复
没看到你的运行结果,我试运行了下,没有问题: 把int hhh()函数稍改了下:
int hhh(int n)
{
    long a[10], i, j, x, y, t, sum;
    x=pow(10, n-1);
    y=pow(10, n);
    for(i=x;i<y;i++)
    {
        t=i;
        sum=0;//把sum赋初值放在这里
        for(j=0;j<n;j++)
        {
            a[j]=t%10;
            t=t/10;
        }
        for(j=0;j<n;j++)
        {
            sum+=pow(a[j],n);
        }
        if(sum==i)
        {
            printf("%ld \t",sum);// “%ld\t"在间加入一空格.
        }
    }
}
m0_51355118 2020-11-21
  • 打赏
  • 举报
回复
没错啊,你的运行结果是什么

69,364

社区成员

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

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