整数反转,c++基础题

class Solution
{
public:
int reverse(int x)
{
int ret;
if (x > -10 && x < 10)
{
int ret = x;
return x;
}
else
{
vector x;
int n = x.size();
for (int i = n - 1; i >= 0; i--)
{
ret += x[i];
}
}
return ret;
}
};
问:以上是我写的代码,我写的有问题,我希望来个大佬,在我写的基础上,进行修改,希望能指出我写的哪里有问题,并修改,来个负责任的大佬

有用请采纳


#include <iostream>
#include <vector>
using namespace std;
 
 
class Solution{
public:
    int reverse(int x){
        if (x > -10 && x < 10)   // 个位数直接返回 
            return x;
        
        bool flag = false; // 记录x的正负 
        if (x <= -10){
            x = -x;
            flag = true;
        }
            
        vector<int> temp;
        while (x != 0){
            temp.push_back(x % 10);
            x /= 10;
        } 
        
        int res, base; // 保存结果
        base = 1;  // 基数 
        res = 0;
        for(int i = temp.size() - 1; i >= 0; i--){
            res += temp[i] * base;
            base *= 10;
        }
        
        if (flag) // 如果是负数, 添加负号 
            return 0-res;
        
        return res;
        
    }
};

int main(){
    Solution s = Solution();
    int x;
    cin >> x;
    cout << s.reverse(x) << endl;    // -10 -> -1能否接受 
}

乱写,x是输入的int,你vector怎么还叫x,你以为这样就把x自动转成vector了吗
而且即使x只有个位,也不影响你用链表翻转它,不需要额外判断一下

可以参考官方答案https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode-solution-bccn/


int reverse(int x)
{
    long n = 0;
    while (x)
    {
        n = n * 10 + x % 10;
        x /= 10;
    }
    return n > INT_MAX || n < INT_MIN ? 0 : n;
}

你的vector完全没有必要,存数字操作就好了

int reverse(int x)
{
    int ret;
    if (x > -10 && x < 10)
    {
        // 如果在10以内,不处理,直接返回(这个其实没必要)
        int ret = x;
        return ret;
    }
    else
    {
        // 
        int temp = x;
        int mod = 0;
        ret = 0;
        // 不断遍历拿出最后的数字,放在新数字的后面
        while (true)
        {
            mod = temp % 10;
            temp = temp / 10;
            ret = ret * 10 + mod;
            if (temp == 0)
            {
                break;
            }
        }
    }
    return ret;
}


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main() {
        long long int ret=0;
        long long int x;
        scanf("%lld",&x);
        if (x > -10 && x < 10)
        {
            int ret = x;
            return x;
        }
        else
        {
            int strT[100];
            int i = 0;
            while (x!=0) {
                int c = x % 10;
                x = x / 10;
                strT[i] = c;
                i++;
            }
            for (int j = 0; j < i; j++)
            {
                ret += (strT[j] * pow(10,i-j-1));
            }
            printf("%lld", ret);
        }
    return 0;
}