gpt4 book ai didi

c - 在 C 中用 POW 函数反转一个五位数

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:37 24 4
gpt4 key购买 nike

我有一个练习需要一个使用 pow 恢复五位数的程序,这是我的尝试:

#include <math.h>
#include <stdio.h>
void main( void )
{
int number, counter = 0, last_digit, reversed = 0;

printf( "Please type a five digit number and I will reverse it\n" );
scanf( "%d", &number );

for( counter = 4; counter >= 0; counter-- )
{
last_digit = number % 10;
number = number / 10;

//printf( "%d %d %.0f %.0f\n\n", reversed, last_digit, pow ( 10, counter ), reversed + last_digit * pow( 10, counter ));

reversed = reversed + last_digit * pow( 10, counter );
}//end for

printf( "The number reversed is %d", reversed );
}//end main

但是如果我输入 12345 它返回 54320,最后一位数字是错误的!为了检查发生了什么,我启用了 printf 注释,这是一个执行示例:

Please type a five digit number and I will reverse it
12345

0 5 10000 50000
49999 4 1000 53999
53999 3 100 54299
54299 2 10 54319
54319 1 1 54320

The number reversed is 54320

不知为何前50000换算成49999,少了一个!奇怪的是它只发生在第一次,然后例如 53999 被正确转换为 53999。这里发生了什么?

最佳答案

正如其他评论者所说,问题在于四舍五入。 pow() 返回一个 double,而 pow(10,4) 必须返回一个接近 10000 但略微偏离一两点的 double。然后在您的 print 语句中,当您打印 reversed + last_digit * pow( 10, counter ) 时,这个值是一个 double 值,接近 50000,但有点偏离。当它打印时,printf 舍入到您打印的精度,因此它打印为 50000。但是当您分配给整数 reversed 时,该值将被截断,如果它甚至比 50000 低一位,它变成了 49999。你的老师设计了一个非常好的问题 - 教得很好!

关于c - 在 C 中用 POW 函数反转一个五位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25695679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com