逆整数


難易度 簡単に
よく聞かれる MakeMyTrip MAQ
数学 文字列

問題文

「逆整数」問題は、逆にされる数を含む整数変数nが与えられていることを示しています。 数字を逆にするプログラムを書いてください。

を逆転させる 整数 と何ら変わりはありません 文字列を逆にする。 整数を文字列に簡単に変換できます。 次に、さまざまな方法を使用して文字列を反転します。 しかし、それを行う代わりに、タスクを完了するための別の方法があります。 整数から文字列への最初の変換はオーバーヘッドであるためです。 したがって、これらのソリューションを検討する代わりに。 新しい方法を検討します。

逆整数

13567
76531

説明:指定された番号の各桁を逆にしたとき。 つまり、最後の桁を数値の最初の桁に置き換え、最初の桁を最後の桁に置き換えます。 数字の各桁を同様の方法で処理します。 結果として76531を取得します。

578
875

説明:より正式には、各桁にインデックス番号を付けることです。 0ベースのインデックス付けを検討し、番号をnと呼んでいます。 次に、n [0]をn [2]に、n [2]をn [0]に入れ替えます。 その後、プロセスは途中まで繰り返されます。 これは、入力を逆にする方法のXNUMXつにすぎません。

反復法

整数を繰り返し反転するアルゴリズム

1. Initialize an integer n containing the number to be reversed.
2. Create a function to reverse a number which accepts an integer variable as it's a parameter.
3. Initialize an integer variable rev as 0 to store the reverse of the given number.
4. After that, traverse through the given number. While the given number is greater than 0,  multiply the integer rev with 10 and add it to the last digit of the given number and store it in the variable rev itself. Update the given number as the number itself divide by 10 to discard the last digit.
5. Finally, return the variable containing the reversed number and print it.

コード

整数を逆にする反復C ++プログラム

#include <bits/stdc++.h> 
using namespace std; 

int revDigits(int n){ 
    int rev = 0; 
    while(n > 0){ 
        rev = rev*10 + n%10; 
        n = n/10; 
    }
    return rev; 
} 
int main(){ 
    int n = 4562; 
    cout<<revDigits(n);
    return 0; 
} 
2654

整数を逆にする反復Javaプログラム

class reverse{ 
    static int revDigits(int n){ 
        int rev = 0; 
        while(n > 0){ 
            rev = rev*10 + n%10; 
            n = n/10; 
        } 
        return rev; 
    } 
    public static void main (String[] args){ 
        int n = 4562; 
        System.out.println(revDigits(n)); 
    } 
}
2654

複雑さの分析

時間の複雑さ

O(log(n)) ここで、nは指定された整数の桁数です。 数字にはlog(n)桁しかないため n.

スペースの複雑さ

O(1) 一定のスペースを使用したためです。

再帰的方法

整数を再帰的に反転するアルゴリズム

1. Initialize an integer n containing the number to be reversed.
2. Create a function to reverse a number which accepts an integer variable as it's a parameter.
3. Initialize an integer variable rev as 0 to store the reverse of the given number.
4. Similarly, initialize an integer variable pos as 1 to store the base position of the digit.
5. After that, check if the given number is greater than 0, call the function itself with a given number divided by 10 as it's a parameter. Add the last digit of the given number multiplied by the variable pos in variable rev. Update the variable pos as the multiplication of 10 with variable pos itself.
6. Finally, return the variable containing the reversed number and print it.

コード

整数を逆にする再帰C ++プログラム

#include <bits/stdc++.h> 
using namespace std; 

int revDigits(int n){ 
    static int rev = 0, pos = 1; 
    if(n > 0){ 
        revDigits(n/10); 
        rev += (n%10)*pos; 
        pos *= 10; 
    } 
    return rev; 
}  
int main(){ 
    int n = 4562; 
    cout<<revDigits(n); 
    return 0; 
} 
2654

整数を逆にする再帰Javaプログラム

class reverse{ 
    static int rev = 0, pos = 1;
    static int revDigits(int n){ 
        if(n > 0){ 
            revDigits(n / 10); 
            rev += (n % 10) * pos; 
            pos *= 10; 
        } 
        return rev; 
    } 
    public static void main (String[] args){ 
        int n = 4562; 
        System.out.println(revDigits(n)); 
    } 
}
2654

複雑さの分析

時間の複雑さ

O(log(n)) ここで、nは指定された整数の桁数です。 数字にはlog(n)桁しかないため n.

スペースの複雑さ

O(1) 一定のスペースを使用したためです。