我正在寻找一种有效的算法来逆转一个数字。
输入: 3456789
输出: 9876543
在C++中,有很多选择,包括移位和位掩码,但是最有效的方法是什么呢?
我的平台: x86_64
号码范围: XXX - XXXXXXXXXX (3 -9位数)
编辑输入的最后一位数永远不会是零,所以没有前导零点问题。
发布于 2013-03-12 06:57:48
像这样的东西会有用的:
#include <iostream>
int main()
{
long in = 3456789;
long out = 0;
while(in)
{
out *= 10;
out += in % 10;
in /= 10;
}
std::cout << out << std::endl;
return 0;
}发布于 2013-03-12 07:00:15
#include <stdio.h>
unsigned int reverse(unsigned int val)
{
unsigned int retval = 0;
while( val > 0)
{
retval = 10*retval + val%10;
val /= 10;
}
printf("returning - %d", retval);
return retval;
}
int main()
{
reverse(123);
}发布于 2013-03-12 13:54:52
您可以将数字转换为字符串,然后使用STL算法反转字符串。下面的代码应该有效:
long number = 123456789;
stringstream ss;
ss << number;
string numberToStr = ss.str();
std::reverse(numberToStr.begin(), numberToStr.end());
cout << atol(numberToStr.c_str());您可能需要包括这些相关的头文件。我不确定这是否是最有效的方法,但是STL算法通常是非常有效的。
https://stackoverflow.com/questions/15355080
复制相似问题