zoukankan      html  css  js  c++  java
  • 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继续。

  • 相关阅读:
    mongodb
    winform最小化到托盘
    C# 多线程实例化 定时执行 实例化线程 刷新控件
    如何弹出一个模式窗口来显示进度条
    如何使自己的程序只运行一次
    Form窗体点击关闭按钮并未关闭进程的解决方法
    如何用C#写一个简单的Login窗口
    C#操作IIS添加MIME类型(win2003)
    天天学习WPF
    如何注册dll文件
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4021060.html
Copyright © 2011-2022 走看看