输入一串数字,反向输出其结果。

#include    <stdio.h>
void output(int n)
{
    printf("%d", n%10);
    n/10 ? output(n/10) : 0;
 
}
 
int main(int argc, char* argv[]) 
{ 
    int n;
    scanf("%d", &n);
    output(n);
    return 0; 
} 
//对这个递归算法不是很理解
//大牛带带我 |^_^|
阅读 8.1k
5 个回答

这个递归程序在开始时先打印了个位数 `printf("%d",n%10)
会打印传入数字n的个位数,然后n/10 ? output(n/10) : (n = 0);`相对复杂一些,在C语言中称为三目运算符,意思是n/10为真则执行冒号前的表达式,否则执行冒号后的表达式,在我看来冒号后的表达式是任何都不会影响程序执行结果,因为如果传入n为一位数字我再printf中已经将其打印出来了。
实际递归写成如下形式可能更好理解:

void output(int n)
{
    //打印个位数字
    printf("%d", n%10);
    //如果还有多余位要打印(十位)
    if(n/10 > 0)
    {
        output(n/10);
    }
}

这方法就是:

除10,余数为最小位数字,打印余数,商为除最小位之外的组成的数字,然后递归操作商,一直到商为0时,则说明已全部反转完成;

要点
** main 里 &n 被引用了

** % 取模运算
1 % 10 = 1
1 % 10 = 2

然后自己自己再理解试试。

#include<iostream>
using namespace;
int main()
{int a,b,c;
cin>>a>>b>>c;
cout<<c<<b<<a;
return 0;
}

c# 的 string有反转的方法Reverse
代码如下:
static void Main(string[] args)

    {
        Console.Write("输入内容:");
        string str = Console.ReadLine();
        Console.WriteLine();
        Console.Write("反转结果:");
        var v = str.Reverse();
        foreach (var item in v)
        {
            Console.Write(item);
        }
        Console.ReadKey();
    }

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题