leetcode第七题--Reverse Integer

Problem:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

终于什么都没参考就一次Accept了。可能是这题比较简单,同时自己也进步了一点点,leetcode就是这样给我们增加信心的吧。

我是这样想的,利用除10和模10两个操作,将每个数字分离在vec中,然后相应的乘以10的倍数输出就行。如果这个数在-10与10之间直接返回就好。

代码如下:

class Solution {
public:
int reverse(int x)
{
    if(x > -10 && x < 10)
        return x;
    int result = 0;
    vector<int> vec;
    int val = x % 10;
    int remain = x;
    while(!(val == 0 && remain ==0))
    {
        vec.push_back(val);
        remain /= 10;
        val = remain % 10;
    }
    for ( vector<int>::size_type i = 0; i < vec.size(); i++)
    {
        result += vec[i] * pow(10, vec.size() - i - 1);
    }
    return result;
}
};

其中remain用来保存中间值。

奇怪的是我在codeblock上用试的话,用102为例子,那么输出是200,我发现codeblock上用cout<<vec[0]  输出是2   cout<<pow(10,vec.size() - 0 - 1)是100,这都没错,但是result  = vec[0] * pow(10, vec.size() - 0 -1); 再cout<<result 就变成199了。然后再假设102中百位的1就成了200。

同样的测试代码,如下所示:它在vs中输出的是2,100,200没错。但是在codeblock中输出2,100,199。

int main()
{
    vector<int> vec;
    vec.push_back(2);
int result; cout<<vec[0]<<endl; cout<<pow(10, vec.size() + 1)<<endl; result = vec[0] * pow(10, vec.size() + 1); cout<< result <<endl; return 0; }

难道不能再相信codeblock了?leetcode继续。

posted on 2014-10-12 21:02  higerzhang  阅读(333)  评论(1编辑  收藏  举报