倒车时为什么我的最后一位数被省略了?

时间:2017-06-24 16:11:47

标签: c++

我试图反转打印一个数字。到目前为止我的代码是...... 我提出> 10的原因是因为如果我有一个数字89%10 =>我得到9但是对于少于10的东西,比如7%10 =>我得到0

int reverse_num(unsigned long int offset) {
    int revnum = 0;
    while(offset > 10){
        int remainder = offset % 10;
        revnum = (revnum * 10) + remainder;
        offset = (offset - remainder) /10.0;
    }
    return revnum ;
}

但问题是如果我将实际参数作为8963传递,则返回369.即,它省略了8。但为什么 ?

1 个答案:

答案 0 :(得分:2)

发生这种情况是因为你的循环条件错误,你应该在offset等于0时终止,而不是当它小于10时,你跳过一位数

#include <iostream>

using std::cout;
using std::endl;

int reverse_num(unsigned long int offset) {
    int revnum = 0;
    while (offset){
        int remainder = offset % 10;
        revnum = (revnum * 10) + remainder;
        offset = (offset - remainder) /10.0;
    }
    return revnum ;
}

int main() {
    cout << reverse_num(8963) << endl;
}

另请注意,当unsigned long int太大而无法放入int

时,此处存在溢出危险