Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正十进制整数的递归函数位,顺序与c+相反+;_C++_Variable Assignment_Reverse_Digits - Fatal编程技术网

C++ 正十进制整数的递归函数位,顺序与c+相反+;

C++ 正十进制整数的递归函数位,顺序与c+相反+;,c++,variable-assignment,reverse,digits,C++,Variable Assignment,Reverse,Digits,我有一个任务要写一个递归函数,它以相反的顺序写一个正整数的数字。我的问题是该函数不能正确显示反转。我知道当显示递归调用中的数字和/或10时,我应该使用%或10,并且基本情况应该是n){ cout您可以使用以下代码(如果您不介意将前导零分条,或者您可以在字符串或ostringstream中累积字符) 此解决方案将省略尾随的零,因为它实际上是反转整数的内容: int reverse(int number, int n = 0) { if (number == 0) { return

我有一个任务要写一个递归函数,它以相反的顺序写一个正整数的数字。我的问题是该函数不能正确显示反转。我知道当显示递归调用中的数字和/或10时,我应该使用%或10,并且基本情况应该是<10。这是我的密码

#include <iostream>
using namespace std;

int reverse(int,int);

int main()
{
    int number;
    int n;

    cout << " Enter number to reverse." << endl;
    cin >> number;
    cout << reverse(number % 10,0);

    return 0;
}//end main

int reverse(int number,int n)
{

    if(n < 10)
    {
        return n;
    }
    else
    {
        return reverse(number/10,n);
    }
}// end reverse
#包括
使用名称空间std;
int反转(int,int);
int main()
{
整数;
int n;
库特数;

我想这就是你的职责:

void reverse(int number){
    if(number == 0) //base/basic case i.e if number is zero the problem is already solved, nothing to do, so simply return
        return;
    else{
        cout << number % 10; // print that last digit, e.g 103%10 == 3 
        reverse(number/10); //solve the same problem but with smaller number, i.e make the problem smaller by dividing it by 10,  initially we had 103, now 10 
    }
}
void reverse(整数){
如果(number==0)//基本/基本情况,即如果number为零,则问题已经解决,无需执行任何操作,因此只需返回
返回;
否则{
cout您也可以这样做:

int reverse(int number,int n) {
if(number > n) {
    cout << number << endl;
    reverse(number-1,n);
}
int反转(int编号,int n){
如果(数字>n){

cout您可以使用以下代码(如果您不介意将前导零分条,或者您可以在字符串或ostringstream中累积字符)


此解决方案将省略尾随的零,因为它实际上是反转整数的内容:

int reverse(int number, int n = 0)
{
  if (number == 0)
  {
    return n;
  }
  else
  {
    int nextdigit = number%10;
    int nextprefix = n*10+nextdigit;
    return reverse(number/10 ,nextprefix);
  }
}
int rev(int n){
如果(n-10)返回n;
整数长度=0;
对于(int i=n;i;i/=10)长度++;
返回n%10*(整数)功率(10,长度-1)+版本(n/10);
}
这是我的解决方案。它只需要一个参数并返回一个int。 也不要忘记包括cmath

int intLength(int i) {
    int l=0;
    for(;i;i/=10) l++;
    return l;
}

int rev(int n) {
    return n<10&&n>-10 ? n : n%10*(int)pow(10, intLength(n)-1) + rev(n/10);
}
intLength(inti){
int l=0;
对于(;i;i/=10)l++;
返回l;
}
内部版本(内部版本n){
返回n-10?n:n%10*(int)功率(10,int长度(n)-1)+版本(n/10);
}

或者,这种方式更优雅。

构造一个void函数来打印是可以的,但是如果希望函数返回一个反向整数,可以尝试以下方法:

int revN(int n,int y=0){
   y+=n%10;
   if (n<10) return y;
   return revN(n/10,10*y); 
}

很难想象你在这里是如何实现的。首先,你的
n
总是0,它总是<10,因此你总是返回0。即使n是可变的,有时可能是>10,它也永远不会改变,所以你会进入一个无休止的递归。我解释了你的代码,以便op能够理解代码是什么做什么和为什么不简单地给他看对他没有帮助的代码,我想我也有同样的想法。但是这种方法也适用于负片,我想保持符号是有道理的。
int intLength(int i) {
    int l=0;
    for(;i;i/=10) l++;
    return l;
}

int rev(int n) {
    return n<10&&n>-10 ? n : n%10*(int)pow(10, intLength(n)-1) + rev(n/10);
}
int revN(int n,int y=0){
   y+=n%10;
   if (n<10) return y;
   return revN(n/10,10*y); 
}
int x= revN(576);