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只有个位,也不影响你用链表翻转它,不需要额外判断一下
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;
}