翻转数值
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));
*/
以上是关于翻转数值的主要内容,如果未能解决你的问题,请参考以下文章