c/c++开发分享程序到阿姆斯特朗’n’数字的数字只给出了错误的输出153

我检查Armstrong’n’数字的程序输出错误,仅在输入为153时。

这是我的代码。

#include #include int main() { int p, k, n, t, sum, n1, m; printf("Enter the number: "); scanf("%d", &n); n1=n; for(p=0, k=1; n/k>=1; ++p, k*=10); printf("nThe number of digits: %d", p); for(sum=0; n>0; n/=10) { t= n%10; printf("nnThe base and power: %d and %d", t, p); m=pow(t, p); printf("nThe calculated no is: %d", m); sum+=pow(t, p); printf("nThe sum is: %d", sum); } printf("nt The original number is : %d", n1); printf("nt The calculated number is: %d", sum); if(n1==sum) printf("nt%d is an armstrong numbern", n1); else printf("nt%d is not an armstrong numbern", n1); return 0; } 

程序在进行数学运算时得到152 ,因此输出错误。 我已经打印了每一步以找到确切的错误点。

问题是,它将5的立方体计算为124

有趣的是,当我使用幂函数在一个单独的简单程序中计算5的立方体时,我得到了正确的答案(125)

我还检查了这里给出的代码 – > https://www.programiz.com/c-programming/examples/check-armstrong-number ,它也提供了错误的输出。 我在本网站上找到的有些类似问题的答案并没有解决问题。

    好吧,我无法重现上述问题。 我确实得到了输入153的正确结果,即它是阿姆斯壮的数字。

    由于使用pow它可能是一些浮点舍入错误(尽管在这种特定情况下我会发现这很奇怪)。

    对于像这样的任务,您不应该使用浮点。 使用可用的最大整数类型。 您不仅可以避免令人讨厌的舍入错误,还可以增加程序可以处理的输入值范围。

    所以,我想解决这个问题:

    我不能使用t * t * t,因为这个程序是针对阿姆斯壮的“n”数字,而不仅仅是3

    您可以轻松编写一个使用整数数学计算t^n的函数。 这是一个例子:

     #include uint64_t intpow(uint64_t t, uint64_t p) { uint64_t result = 1; while(p>0) { result = result * t; --p; } return result; } 

    注意:在当前forms中,函数缺少溢出检测,因为我想保持函数简单。

    有两种方法可以解决。 1)使用round()函数,它将给出最接近的整数(因为在代码块中的浮点计算中存在一些错误)。

    2)将sum变量声明为float或double,因为它将转换为完美的浮点精度。

      以上就是c/c++开发分享程序到阿姆斯特朗’n’数字的数字只给出了错误的输出153相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/546007.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注