int型の数字を逆順に入れ替える関数を実装
第一引数のnumの数字が、逆順となって戻り値として返します。
int revInt(int num){
double rev = 0;
while(num != 0){
rev =rev * 10 + num % 10;
num = num / 10;
}
if(INT_MIN <= rev && rev <= INT_MAX){
return rev;
}else{
return 0;
}
}
10で割った余りで最下位の数字を取り出して、
10倍していくことで、先頭に持っていきます。
numは10で割ることで、最下位の数字を除去していきます。
while(num != 0){
rev =rev * 10 + num % 10;
num = num / 10;
}
逆順にするとintの範囲を超えることがあるので、
その時のエラー処理ですね。
if(INT_MIN <= rev && rev <= INT_MAX){
return rev;
}else{
return 0;
}
サンプルコード
下記がサンプルコードになります。
$ cat sample.c
#include <stdio.h>
#include <limits.h>
int revInt(int num){
double rev = 0;
while(num != 0){
rev =rev * 10 + num % 10;
num = num / 10;
}
if(INT_MIN <= rev && rev <= INT_MAX){
return rev;
}else{
return 0;
}
}
int main(){
printf("%d\n", revInt(123));
printf("%d\n", revInt(-123));
printf("%d\n", revInt(2147483647));
return 0;
}
下記が実行結果になります。
$ gcc -o sample sample.c $ ./sample 321 -321 0
