如何在C++中递归地反转负整数
How to reverse a negative integer recursively in C++?
我正在进行一些递归练习,我需要编写一个程序来反转整数的输入
输入示例:cin>>12345;输出应为54321
但如果该整数为负数,则只需要将负号附加到第一个数字上。
输入示例:cin>>-1234;输出-4321
我很难让我的程序适应负数。如果我运行,我设置它的方式
测试示例:12345我得到正确的输出54321
所以我的递归和基是成功的。但如果我检测出阴性,我会得到
测试示例:-1245我得到这个是因为我不理解-5-4-3-2 1
#include<iostream>
using namespace std;
void reverse(int);
int main()
{
int num;
cout << "Input a number : ";
cin >> num;
reverse(num);
return 0;
}
void reverse(int in)
{
bool negative = false;
if (in < 0)
{
in = 0 - in;
negative = true;
}
if (in / 10 == 0)
cout << in % 10;
else{
if (negative == true)
in = 0 - in;
cout << in % 10;
reverse(in / 10);
}
}
若要反转负数,请输出-
,然后反转相应的正数。我建议使用递归而不是状态,比如:
void reverse(int in)
{
if (in < 0)
{
cout << '-';
reverse(-in);
}
else
{
// code to recursively reverse non-negative numbers here
}
}
将reverse
函数拆分为两部分:第一部分只打印-
(如果输入为负数),然后调用第二部分,即您所拥有的递归代码。(您不再需要任何if (negative) ...
处理,因为第一部分已经处理了它。)
顺便说一句,if (bool_variable == true) ...
过于冗长。如果说if (value_is_negative) ...
之类的话,阅读代码会更容易。
您的递归函数不保持状态。当你第一次递归时,它会打印"-"符号,但每次你向递归返回负数时,它都会像第一次一样运行,并再次打印"-"。
最好在第一次看到负数时打印"-",并将数字的其余部分作为正值发送给递归。
#include<iostream>
using namespace std;
void reverse(int);
int main()
{
int num;
cout << "Input a number : ";
cin >> num;
reverse(num);
return 0;
}
void reverse(int in)
{
bool negative = false;
if (in < 0)
{
in = 0 - in;
negative = true;
}
if (in / 10 == 0)
cout << in % 10;
else{
if (negative == true) {
cout << '-';
negative = false;
}
cout << in % 10;
reverse(in / 10);
}
}
int reverse(long int x) {
long int reversedNumber = 0, remainder;
bool isNegative = false;
if (x <0){
isNegative = true;
x *= -1;
}
while(x > 0) {
remainder = x%10;
reversedNumber = reversedNumber*10 + remainder;
x= x/10;
}
if (isNegative) {
if (reversedNumber > INT_MAX){
return 0;
}
else
return reversedNumber*(-1);
}
else
{
if (reversedNumber > INT_MAX){
return 0;
}
else
return reversedNumber;
}
}
相关文章:
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 递归返回可被给定整数 k 整除的位数
- 递归函数,用于查找 2 个整数之间的最大值
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 如何使用递归函数返回数组中整数的索引?
- 三重限制的正整数组合的非递归枚举
- 使用递归反转整数,而不在C++尾随 0
- 使用递归实现 pow(A, B) % C,其中 A、B 和 C 是正整数
- 通过递归计数整数中的数字数量
- 编译时间递归函数以计算两个整数的下一个功能
- 使用结构和递归查找整数数组中的最大数字
- 给定一组 12 个整数,如何递归生成所有可能的 4 组 3 个整数?C++
- 正十进制整数的递归函数位数,按c++的相反顺序排列
- 计算n个整数之和的递归函数C++
- 如何在C++中递归地反转负整数
- 编写一个递归函数来乘以2个整数
- c++ 使用加法递归地乘以 2 个整数
- 使用递归C++字符串到整数
- 从递归函数返回非常大的整数