C++程序 反转数字
写一个程序,反转一个整数的数字。
例子:
输入: num = 12345
输出: 54321
输入: num = 876
输出: 678
流程图:
迭代方式
算法:
输入:num
(1) 初始化rev_num = 0
(2) 循环,当num > 0时
(a) 将rev_num乘以10并将num除以10的余数加到rev_num上
rev_num = rev_num*10 + num%10;
(b) 将num除以10
(3) 返回rev_num
例子:
num = 4562
rev_num = 0
rev_num = rev_num *10 + num%10 = 2
num = num/10 = 456
rev_num = rev_num *10 + num%10 = 20 + 6 = 26
num = num/10 = 45
rev_num = rev_num *10 + num%10 = 260 + 5 = 265
num = num/10 = 4
rev_num = rev_num *10 + num%10 = 2650 + 4 = 2654
num = num/10 = 0
程序:
// C++ 程序来实现
// 上述方法
#include <bits/stdc++.h>
using namespace std;
// 迭代函数来
// 反转数字
int reverseDigits(int num)
{
int rev_num = 0;
while (num > 0)
{
rev_num = rev_num * 10 + num % 10;
num = num / 10;
}
return rev_num;
}
// 主函数
int main()
{
int num = 4562;
cout << "反转后的数字是 " <<
reverseDigits(num);
getchar();
return 0;
}
输出:
反转后的数字是 2654
时间复杂性: O(log(n)), 其中 n 是输入数字。
辅助空间: O(1)
递归方式:
// C++ 程序来反转数字
#include <bits/stdc++.h>
using namespace std;
// 递归函数来
// 反转数字
int reverseDigits(int num)
{
static int rev_num = 0;
static int base_pos = 1;
if (num > 0)
{
reverseDigits(num / 10);
rev_num += (num % 10) * base_pos;
base_pos *= 10;
}
return rev_num;
}
// 主程序
int main()
{
int num = 4562;
cout << "反转后的数字是 " <<
reverseDigits(num);
return 0;
}
输出:
反转后的数字是2654
时间复杂性: O(log(n))
辅助空间: O(log(n)), 其中 n 是输入数字。
使用reverse()方法
我们将使用reverse()方法反转字符串。
特殊情况
输入:32100
对于上述输入,如果我们尝试通过反转字符串来解决这个问题,那么输出将为 00123。
所以为了解决这种情况,我们需要再次将字符串转换为整数,这样输出就会是 123
// C++程序逆转一个数字
#include <bits/stdc++.h>
using namespace std;
int reverseDigits(int num)
{
// 将数字转换为字符串
string strin = to_string(num);
// 反转字符串
reverse(strin.begin(), strin.end());
// 将字符串转换为整数
num = stoi(strin);
// 返回整数
return num;
}
// 主函数
int main()
{
int num = 4562;
cout << "逆转后的数字是 " <<
reverseDigits(num);
return 0;
}
输出:
逆转后的数字是 2654
时间复杂度: O(log 10 n),其中 n 是输入的数字
辅助空间: O(1)