我正在进行一些递归练习,我需要编写一个反转整数输入的程序
输入示例:cin>> 12345;输出应为54321
但如果该整数为负,则负号必须仅附加到第一个数字。
输入示例:cin>> -1234;输出-4321
我很难让我的程序适应负数。如果我运行
,我的设置方式测试示例:12345我得到正确的输出54321
所以我的递归和基础都是成功的。但如果我运行负面,我会
测试示例:-12345我得到这个是因为我不明白-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);
}
}
答案 0 :(得分:1)
将reverse
函数拆分为两部分:第一部分只打印-
(如果输入为负数),然后调用第二部分,即你拥有的递归代码。 (你不再需要任何if (negative) ...
处理,因为第一部分已经处理了它。)
顺便说一句,if (bool_variable == true) ...
过于冗长。如果您说if (value_is_negative) ...
。
答案 1 :(得分: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) {
cout << '-';
negative = false;
}
cout << in % 10;
reverse(in / 10);
}
}
答案 2 :(得分:1)
要反转负数,请输出-
,然后反转相应的正数。我建议使用递归而不是状态,如下所示:
void reverse(int in)
{
if (in < 0)
{
cout << '-';
reverse(-in);
}
else
{
// code to recursively reverse non-negative numbers here
}
}
答案 3 :(得分:0)
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;
}
}