/* 输入一个整数,使用函数逆序输出 */
#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 */