Salida inversa

Descripción del título
Utilice la recursividad para escribir un programa que genere un número entero no negativo en orden inverso. Por ejemplo, ingrese 1234 y salida 4321 (sin 0 a la izquierda).
Entrada
Múltiples grupos de entradas, cada grupo ingresa un número entero no negativo.
Salida
Muestra los resultados en orden inverso, cada resultado ocupa una línea.
Entrada de la muestra
12
1,230
0
Ejemplo de salida
21
321
0

Nota:
El último 0 en 1.12030 es el primero después del orden inverso y no debería aparecer. Pero el primer 0 debe salir como de costumbre
2. Hay un hoyo más grande a través de este hoyo: el llamado líder no necesariamente se refiere al último 0, por ejemplo, el 0 en 120000 no debe salir.

Método uno:
// Usando la matriz de variables globales para almacenar todos los valores y haciendo un juicio unificado en la función principal, puede llevar mucho tiempo

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define ll long long
#define N 150
using namespace std;
int num,s[N];
void Find(int n)
{
    
    
    if(n==0)return;
    else
    {
    
    
        s[num]=n%10;
        num++;
        Find(n/10);
    }
}
int main()
{
    
    
    int n;
    while(cin>>n)
    {
    
    
        num=0;
        if(n!=0)
        {
    
    Find(n);
        for(int i=0;i<num;i++)
            if(i==0&&s[i]==0)
            {
    
    
                while(!s[i]) i++;
                i--;
            }
            else
                cout<<s[i];
        }
        else cout<<n;
        cout<<endl;
    }
}

Método dos:
// Use una bandera de variable para controlar si el primer bit de la salida es 0, si no es salida, o si no lo es, envíe el resto cuando sea recursivo.

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define ll long long
#define N 150
using namespace std;
int solve(int n,int flag)
{
    
    
    if(n<10)
    {
    
    
        return n;
    }
    int a=n%10;//连续判断是否为前导0,是则不输出
    if(a!=0)
       flag=1;//发现不再出现0为前导时,将flag标记为1,往后正常输出
    if(flag)
        cout<<a;
    return solve(n/10,flag);
}


int main()
{
    
    
        int n;
        int flag=0;
        while(cin>>n)
           cout<<solve(n,flag)<<endl;//这里很明显的主函数进去的flag值在函数中做变化后不会影响主函数flag,因此无须在主函数每次循环中加个flag=0
        return 0;
}



Supongo que te gusta

Origin blog.csdn.net/m0_52380556/article/details/115264618
Recomendado
Clasificación