伊藤  直子

伊藤 直子

1654514846

C /C++で数値を逆にする

概要

C / C ++プログラムで数字を逆にするということは、数字を交換すること、つまり、指定された数字の最後の数字を最初の位置にすること、またはその逆を意味します。

記事の範囲

この記事では、数値の反転とそのアルゴリズムに関する基本的な理解を提供します。

Cで同じものを実装するためのさまざまな方法。

前提条件

C /C++の基本を理解している必要があります

ループと再帰がどのように機能するかに関する理解。

序章

数字を逆にするということは、数字の最後の数字が最初になるように、またはその逆になるように数字を交換することを意味することを私たちは知っています。

例を使って同じことを理解しましょう:-

与えられた入力は56897です。

その場合、指定された数の逆は79865になります。

数値を逆にすることの意味を理解したので、そのアルゴリズムの理解にさらに進みましょう。

Cで数値を反転するアルゴリズム

ステップ1.与えられた数をnum= 5689と考えてみましょう。逆数をrev_num=0と見なします。

ステップ2。次に、指定された式を使用します。

rev_num = rev_num * 10 + num%10 ;

num = num / 10 _

毎回わかるように、指定された数値の最後の桁を抽出し、その最後の桁に10を掛けてrev_numに対応します。

numから同じ最後の桁が抽出されないようにするために、numを10で除算し、その値をnumに格納してnumを更新します。

ステップ3指定された数が0以下になるまで手順を続行します。

その段階に達すると、逆の番号を取得します。

上記の例では、5回目の反復の後、逆数、つまり79865を取得します。

 

numから抽出された数字10、つまりrev_numとの乗算
70 * 10 + 7 = 7
97 * 10 +9 = 79
879 * 10 + 8 = 798
6798 * 10 + 6 = 7986
57986 * 10 + 5 = 79865

 

Cで同じものを実装するためのさまざまな方法

ここでは、モジュロ演算子と除算演算子の2つの算術演算子を使用します。

数値を反転する反復法

# include <stdio.h>
 
int main(){
 
    int num, rev_num = 0 , rem ;
 
    prinf("enter the number you wish to reverse:");
    scanf ("%d",&num);
 
    // using while loop and decreasing num till num >= 0
    while (num != 0){
       
        rem  = num %10 ;
        rev_num = (rev_num *10) + rem;
        num = num/ 10 ; //updating the the number by dividing it by 10
    }
 
    printf ("reverse of the given number %d is : %d", num , rev_num);
 
    return 0;
}

出力

enter the number you wish to reverse: 54689
reverse of the given number 54689 is : 98645

数値を逆にする再帰的実装

# include <stdio.h>
 
int reversenumber(int n, int revnum){
    if (n==0) return revnum;
 
    return reversenumber (n/10 , n % 10 + k*10);  
 
}
int main(){
 
    int num, rev_num  ;
 
    prinf("enter the number you wish to reverse");
    scanf ("%d",&num);
 
    //calling recursive function reversenumber
    rev_num = reversenumber(num, 0);
 
    printf ("reverse of the given number %d is : %d", num , rev_num);
 
    return 0;
}

出力

enter the number you wish to reverse: 54689
reverse of the given number 54689 is : 98645

説明

再帰関数でrevnumは、指定された数の逆を表します。

'n'で表される与えられた数がゼロになると、逆の数を返すという条件を設定しました。

他のすべての場合は、それぞれreversenumbernと更新された値で(n / 10、n%10 + k * 10)を呼び出します。revnum

反復nの値revnumの値戻り値
0546890return(54689,0)
154689return(5468,9)
254698return(546,98)
354986リターン(54,986)
459864return(5,9864)
5098654n == 0として、revnum=98654の値を返すだけです。

関数の使用

# include <stdio.h>
 
int revnumber( int n){
    int rem , rev_num =0;
 
    for (; n> 0; n= n/10){
        rem = n%10 ;
        rev_num = rev_num*10 + rem;
    }
    return rev_num;
}
int main(){
 
    int num, rev_num = 0  ;
 
    prinf("enter the number you wish to reverse:");
    scanf ("%d",&num);
 
    rev_num = revnumber (num);
   
    printf ("reverse of the given number %d is : %d", num , rev_num);
 
    return 0;
}

出力

enter the number you wish to reverse: 56897
reverse of the given number 54689 is : 79865

入力として負の数が指定された場合はどうなりますか?

私たちが知っているように、複数の言語を解釈できる人間とは異なり、コンピューターは2進数のみを処理します。負の数の2進数表現は、正の数とは異なります。

したがって、上記のアルゴリズムを負の数に直接適用すると、間違った答えが生成されます。このような場合を避けるために、負の数に-1を掛けて正の数にし、アルゴリズムを適用して逆にした後、再び-1を掛けて逆の数にします。

与えられたコードは、これをよりよく理解するのに役立ちます。

# include <stdio.h>
# include <stdbool.h>
 
int main(){
 
    int num, rev_num = 0 , rem ;
    bool neg = false;
 
    prinf("enter the number you wish to reverse:");
    scanf ("%d",&num);
 
    if (num < 0){
        num = -num ;
        neg = true;
    }
 
    // using while loop and decreasing num till num >= 0
    while (num != 0){
       
        rem  = num %10 ;
        rev_num = (rev_num *10) + rem;
        num = num/ 10 ; //updating the the number by dividing it by 10
    }
 
    if (neg){
        num = - num;
    }
 
    printf ("reverse of the given number %d is : %d", num , rev_num);
 
    return 0;
}

数を逆転させながらオーバーフローケースを処理する

ご存知のように、整数は最大32ビットを処理できます。数値の逆が32ビットを超えたりオーバーフローしたりする可能性があります。このような場合は、逆数が32ビットを超えていないか毎回確認してください。

以下のコードは、より良い理解を提供します。

# include <stdio.h>
 
int revnumber( int n){
    int rem , rev_num =0, prev_num = 0;
 
    while (n ! =0 ){
        rem = n%10 ;
        prev_num = (rev_num) *10 + rem;
 
        if ((prev_num - rem )/10 != rev){
            printf("WARNING REVERSE NUMBER IS OVERFLOWED!!!");
            return 0;
        }
        else rev_num = prev_num;
 
        n= n/10;
    }
    return rev_num;
}
int main(){
 
    int num, rev_num = 0  ;
 
    prinf("enter the number you wish to reverse:");
    scanf ("%d",&num);
 
    rev_num = revnumber (num);
   
    if (rev_num != 0){
        printf ("reverse of the given number %d is : %d", num , rev_num);
    }
     
    return 0;
}

このコードでは、逆数がオーバーフローしていないかどうかを確認しました。オーバーフローした場合、rev_numにはガベージ値が含まれますが、これは( prev_num --rem)/ 10とは等しくなりませ

アルゴリズムの分析

時間計算量

whileループまたは再帰関数は、numberに存在する桁数に対してプログラムを実行します。数値numの桁数は、10を底とするlog(num)の計算に使用されます。したがって、時間計算量はO(log10(num))です。

スペースの複雑さ

余分なスペースは使用していません。したがって、スペースの複雑さはO(1)です。

結論

この記事では、再帰的なCのようなループで実装できるいくつかの方法とさまざまな方法を逆にするアルゴリズムを見てきました。

それに加えて、与えられた入力が負であるか、数値の逆数が32ビットを超える場合などのいくつかのコーナーケースを見ることができます。

数値の反転と美しい回路図面でのその使用法に関する知識をさらに高めるために、スケーラーのトピック で数値を反転するためのCプログラムで公開されたこの厳選された記事を参照することをお勧めします。

このストーリーはもともとhttps://hackernoon.com/how-to-reverse-a-number-in-ccで公開されました 

#c #cpp #cplusplus 

What is GEEK

Buddha Community

C /C++で数値を逆にする
Tamale  Moses

Tamale Moses

1624240146

How to Run C/C++ in Sublime Text?

C and C++ are the most powerful programming language in the world. Most of the super fast and complex libraries and algorithms are written in C or C++. Most powerful Kernel programs are also written in C. So, there is no way to skip it.

In programming competitions, most programmers prefer to write code in C or C++. Tourist is considered the worlds top programming contestant of all ages who write code in C++.

During programming competitions, programmers prefer to use a lightweight editor to focus on coding and algorithm designing. VimSublime Text, and Notepad++ are the most common editors for us. Apart from the competition, many software developers and professionals love to use Sublime Text just because of its flexibility.

I have discussed the steps we need to complete in this blog post before running a C/C++ code in Sublime Text. We will take the inputs from an input file and print outputs to an output file without using freopen file related functions in C/C++.

#cpp #c #c-programming #sublimetext #c++ #c/c++

Dicey Issues in C/C++

If you are familiar with C/C++then you must have come across some unusual things and if you haven’t, then you are about to. The below codes are checked twice before adding, so feel free to share this article with your friends. The following displays some of the issues:

  1. Using multiple variables in the print function
  2. Comparing Signed integer with unsigned integer
  3. Putting a semicolon at the end of the loop statement
  4. C preprocessor doesn’t need a semicolon
  5. Size of the string matters
  6. Macros and equations aren’t good friends
  7. Never compare Floating data type with double data type
  8. Arrays have a boundary
  9. Character constants are different from string literals
  10. Difference between single(=) and double(==) equal signs.

The below code generates no error since a print function can take any number of inputs but creates a mismatch with the variables. The print function is used to display characters, strings, integers, float, octal, and hexadecimal values onto the output screen. The format specifier is used to display the value of a variable.

  1. %d indicates Integer Format Specifier
  2. %f indicates Float Format Specifier
  3. %c indicates Character Format Specifier
  4. %s indicates String Format Specifier
  5. %u indicates Unsigned Integer Format Specifier
  6. %ld indicates Long Int Format Specifier

Image for post


A signed integer is a 32-bit datum that encodes an integer in the range [-2147483648 to 2147483647]. An unsigned integer is a 32-bit datum that encodes a non-negative integer in the range [0 to 4294967295]. The signed integer is represented in twos-complement notation. In the below code the signed integer will be converted to the maximum unsigned integer then compared with the unsigned integer.

Image for post

#problems-with-c #dicey-issues-in-c #c-programming #c++ #c #cplusplus

Ari  Bogisich

Ari Bogisich

1589816580

Using isdigit() in C/C++

In this article, we’ll take a look at using the isdigit() function in C/C++. This is a very simple way to check if any value is a digit or not. Let’s look at how to use this function, using some simple examples.

#c programming #c++ #c #c#

Ari  Bogisich

Ari Bogisich

1590587580

Loops in C++ | For, While, and Do While Loops in C++

In this Video We are going to see how to use Loops in C++. We will see How to use For, While, and Do While Loops in C++.
C++ is general purpose, compiled, object-oriented programming language and its concepts served as the basis for several other languages such as Java, Python, Ruby, Perl etc.

#c #c# #c++ #programming-c

Shaylee  Lemke

Shaylee Lemke

1589791833

Object Oriented Programming in C++ | C++ OOPs Concepts | Learn Object Oriented C++

C++ is general purpose, compiled, object-oriented programming language and its concepts served as the basis for several other languages such as Java, Python, Ruby, Perl etc.

The goal of this course is to provide you with a working knowledge of C++. We’ll start with the basics, including syntax, operators, loops, and functions. This Course will explain you how to use data structures and create your own Functions. This Course will show you the details of the powerful object and template systems so you can create useful classes and objects.

Youtube channel: ProgrammingKnowledge - https://www.youtube.com/watch?v=_SH1T3y_D7o

#c #c# #c++ #programming-c