Sortie inverse

Description du titre
Utilisez la récursivité pour écrire un programme qui génère un entier non négatif dans l'ordre inverse. Par exemple, entrée 1234 et sortie 4321 (sans 0 initial).
Entrée
Plusieurs groupes d'entrées, chaque groupe entre un entier non négatif.
Sortie
Sortie des résultats dans l'ordre inverse, chaque résultat occupe une ligne.
Entrée d' échantillon
12
1230
0
Exemple de sortie
21
321
0

Remarque:
le dernier 0 de 1.12030 est le début après l'ordre inverse et ne doit pas être émis. Mais le premier 0 doit être affiché comme d'habitude
2. Il y a un plus grand trou dans ce puits: le soi-disant leader ne fait pas nécessairement référence au dernier 0, par exemple, le 0 en 120000 ne doit pas être sorti.

Première méthode:
// En utilisant le tableau de variables globales pour stocker toutes les valeurs et en faisant un jugement unifié dans la fonction principale, cela peut prendre beaucoup de temps

#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éthode deux:
// Utilisez un indicateur de variable pour contrôler si le premier bit de la sortie est 0, s'il n'est pas émis ou si ce n'est pas le cas, affiche le reste lorsqu'il est récursif.

#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;
}



Je suppose que tu aimes

Origine blog.csdn.net/m0_52380556/article/details/115264618
conseillé
Classement