当前位置: 代码迷 >> C语言 >> 为啥有些负数返回时少个1
  详细解决方案

为啥有些负数返回时少个1

热度:9022   发布时间:2013-02-26 00:00:00.0
为什么有些负数返回时少个1?
/* 输入一个整数,使用函数逆序输出 */
#include <stdio.h>
#include <math.h>

int main(void)
{
    int reverse(int number);                                   
    int number;

    printf("Enter a number:");
    scanf("%d", &number);
    printf("%d \n", reverse(number));
    return 0;
}
int reverse(int number)                                           
{
    int x, n = 0, sum = 0;
    x = number;
    while (number != 0) {
        number = number / 10;
        n++;
    }
    if (x > 0) {
        while (x != 0) {
            sum = sum + (x%10) * pow(10, n - 1);
            n--;
            x = x / 10;
        }
        return sum;
    } else if (x < 0) {
        x = fabs(x);
        while (x != 0) {
            sum = sum + (x%10) * pow(10, n - 1);
            n--;
            x = x / 10;
        }
        return -sum;
    } else {
        return 0;
    }
}

正整数和零都输出正常,就是输出负数的时候,有些正常有些少个1,例如:
-123输出:-320
-12345输出:-54320
-1234输出:-4321(正常)
-22334输出:-43321(又少了个1)
我调试了下,发现负数不正常输出时,sum第一次加的时候会丢失少个1,请问这是为什么啊??
c

------解决方案--------------------------------------------------------
为毛用fabs()和pow(),这都是处理浮点数的,整数的话,用abs(),pow()得自己写了,好在不难。
------解决方案--------------------------------------------------------
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

include\float.h
...
#define DBL_DIG         15                      /* # of decimal digits of precision */
#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
  相关解决方案