翻转数值

Posted jest549

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻转数值相关的知识,希望对你有一定的参考价值。

输入1234  输出4321

输入-1234 输出-4321

要求实现判断:输入数为-2^(32-1)~2^(32-1)-1,翻转数-2^(32-1)~2^(32-1)-1,在此范围输出翻转数,否则提示溢出.

实现:法一取余放入队列,取出队首乘倍数实现翻转

#include<iostream>
#include<queue>
using namespace std;
int dealFuntion(long long input);
long long mypow(int n);
int main(int argc, char* argv[])
    
    long long a=0;
    cout<<"输入需要翻转的数值:"<<endl;
    cin>>a;
    int b=dealFuntion(a);
    cout<<"翻转的数值为:"<<endl;
    cout<<b<<endl;
    return 0;
int dealFuntion(long long input)
if(input>2147483647||input<-2147483648)
cout<<"输入数溢出"<<endl;
return 0;
    queue<int> s1;
    long long i=0;
    int j=0;
    int symbol=1;
    int count=0;
    long long res;
    long long tmp;
    if(input ==0)
    
        return 0;
    
tmp=input;
    if(input<0)
    
        symbol=-1;
tmp=-input;
    
    if(tmp%10!=0)
    
        for(i=1;(j=(tmp/i)%10)!=0;i=i*10)
        
            s1.push(j);
            count++;
        
    
    else
       
        s1.push(0);
        count++;
        for(i=10;(j=(tmp/i)%10)!=0;i=i*10)
        
            s1.push(j);
            count++;
        
    
    for(;(!s1.empty());s1.pop())
    
        int tmp=s1.front();
        res=res+tmp*mypow(count-1);
if(res>2147483647)
            cout<<"翻转数溢出"<<endl;
return 0;
        count--;
    
return (int)res*symbol;
long long mypow(int n)
int i=0;
long long res=1;
for(i=1;i<=n;i++)
res=10*res;
return res;
 
 
法二:数值转为字符串,翻转字符串,字符串转为数值实现翻转
#include<iostream>
#include<sstream>
#include<algorithm>
#include<string>
#include<stdlib.h>
using namespace std;
string lltostring(long long input);
long long rev_stringtoll(string my_string);
void rev_result(long long input);
int main(int argc, char* argv[])
long long input;
cout<<"输入翻转数值"<<endl;
cin>>input;
rev_result(input);
return 0;
void rev_result(long long input)
long long my_ll;
int symbol=1;
if(input>2147483647||input<-2147483648)
cout<<"输入数溢出"<<endl;
return;
if(input==0)
cout<<"翻转结果为:"<<endl<<"0"<<endl;
return;
if(input<0)
symbol=-1;
input=-input;
my_ll=rev_stringtoll(lltostring(input))*symbol;
if(my_ll>2147483647||my_ll<-2147483648)
cout<<"翻转数溢出"<<endl;
else
cout<<"翻转结果为:"<<endl<<my_ll<<endl;
long long rev_stringtoll(string my_string)
reverse(my_string.begin(),my_string.end());
return strtoll(my_string.c_str(),NULL,10);
string lltostring(long long input)
stringstream my_stream;
string res_string;
my_stream<<input;
my_stream>>res_string;
return res_string;

/*
//实现字符串翻转
char *reverse_str(char *str)
if(NULL == str) //字符串为空直接返回
return str;
char *begin;
char *end;
begin = end = str;

while(*end != ‘\0‘) //end指向字符串的末尾
end++;
--end;

char temp;
while(begin < end) //交换两个字符
temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;

return str; //返回结果
void main()
char str[] = "123456";
printf(reverse_str(str));
*/

以上是关于翻转数值的主要内容,如果未能解决你的问题,请参考以下文章

翻转整数

龙骨动画如何水平翻转

leetcode 07.整数翻转

C语言位运算的应用如何按bit位翻转一个无符号整型

leetcode7 整数翻转(对于整数数位操作的简洁算法)

当系统时钟为100mhz时,gpio翻转速度最大可以到多少