逆置数字

我已开始的策略其实是直接转字符串操作一下完了:

int reverse(int x) {
    if (x == 0){
        return 0;
    }
    while (x % 10 == 0){
        x /= 10;
    }
    auto&& s = to_string(x);
    auto result = atoll(string(s.crbegin(), s.crend()).data());
    if (result > INT32_MAX){
        return 0;
    }
    return static_cast<int>(x < 0? -result : result);
}

但是这效率低啊,于是联想到上一个判断回文数的问题,我就改成了:

int reverse(int x) {
    long long result = 0;
    while (x != 0){
        result = result * 10 + x % 10;
        x /= 10;
    }
    if (result > INT32_MAX || result < INT32_MIN){
        return 0;
    }

    return static_cast<int>(result);
}
时间: 2024-11-10 16:52:37

逆置数字的相关文章

单链表逆置

重写单链表逆置,熟能生巧- #include <iostream> #include <cstdlib> using namespace std; typedef struct List{ int num; struct List *next; }ListNode,*pListNode; void display(ListNode *pHead) { while(pHead) { cout<<pHead->num<<"--"; pH

数组逆置

1 public class Reverse { 2 3 /** 4 * 逆置函数 5 * 6 * @param array 7 * 需要逆置的数组 8 * @return 逆置后的数组 9 */ 10 public int[] reverse(int[] array) { 11 int size = array.length; 12 for (int i = 0; i < size / 2; i++) { 13 /* array[size - 1 - i]:下标为i值的对称下标的值 */ 14

java实现单链表逆置

1 class LNode 2 { 3 public LNode next; 4 public int data; 5 } 6 /*逆置链表*/ 7 class Nizhi 8 { 9 private static LNode head = new LNode();; 10 private static LNode node; 11 private static LNode tail; 12 private static int index; 13 private static LNode ne

如何在时间复杂度为O(n)空间复杂度为O(1)的情况下完成链表的逆置

问题如题目,首先分析,链表的反转的空间复杂度如果为常数级,那么不可能完成从堆中申请数据来完成链表的反转工作,所以问题就转化为了如何将原链表修改/拆解为逆置的链表: 函数形式假定如下  void Inverse(List*&head)//////修改原链表为逆置 第一种办法最简单,就是在创建一个局部变量 List*tail 作为产生的新链表的“尾部”,再设置一个“游标”指针用于指向当前正在访问的链表单元,然后按顺序循环遍历链表,在遍历的同时将正在访问的链表单元添加到新链表尾部的“tail”指针前面

对于&quot;单链表逆置和递归&quot;的问题的理解.

一. 相关知识要点: 学习或了解基础数据结构和C语言, 对基础链表知识或相关知识有概况性认识. 例如: 本题目结构为: 1 #define elem_type int 2 3 typedef struct _single_list { 4 elem_type data; //所存的数据元素 5 _single_list *next; //所存的指针元素 6 }ListNode; 二. 问题的思考过程(本题以3种不同的方法解决): <1>类似于我们学习的C语言基础知识中的冒泡排序(参考C程序设计

【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)

建立源文件List.cpp include "List.h" int main() {     Test();     system("pause");     return 0; } 建立头文件List.h #ifndef __LISH_H__ #define __LISH_H__ #include<iostream> using namespace std; typedef int DataType; struct ListNode {     Li

不创建第三方变量对整型数组逆置

以整型数组为例实现逆置 将一个整型数组逆序,如:数组a[5]={1,2,3,4,5},逆序之后数组a的内容变成{5,4,3,2,1}. void SwapNum(int& a, int& b) {  a = a^b;  b = a^b;  a = a^b; } void SwapArray(int *str,int size) {  int i = 0;  for (i = 0; i < size / 2; i++)  {   SwapNum(str[i], str[size - i

线性表逆置

建立长度为n的顺序表,然后将表中的数据元素逆置,即若表中原来的数据元素序列为(a0,a1,a2,-,an),则逆置后的数据元素序列为(an,an-1,an-2,-,a1,a0).(数据类型为字符型) Description 第一行为顺序表的长度n: 第二行为顺序表中的数据元素: Input 输出为逆置后的顺序表 Output 1 2 3 7 A B C D E F G Sample Input 1 G F E D C B A Sample Output #include<stdio.h> in

单链表就地逆置

题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1).所谓"就地"指辅助存储空间为O(1). 解题思路: 如果是顺序存储的话,我们很容易想到解题思路,利用1个辅助变量让第1个元素与第n个元素交换,然后再利用这个辅助变量让第2个元素与第n-1个元素交换,...最后利用这个辅助变量让第n/2个元素与第n+1-n/2个元素交换. 如果不要求"就地"的话,可以创建一个n个元素辅