Inversão de inteiros (linguagem C)

Pergunta: Dado um inteiro x com sinal de 32 bits, retorne o resultado da inversão dos dígitos em x.

Retorna 0 se o inteiro invertido exceder o intervalo [−2^31, 2^31 − 1] de um inteiro com sinal de 32 bits.
Suponha que o ambiente não permita o armazenamento de números inteiros de 64 bits (com ou sem sinal).


A chave para esta questão é que o intervalo de números inteiros é limitado e o estouro deve ser evitado.

Código 1:

int reverse(int x){
    long n = 0;
    while(x!=0){
        n = n*10 + x%10;
        x /= 10;
    }
    return (int)n == n? n:0;
}

Ao retornar o valor, após converter n do tipo long para o tipo int, se for igual ao número original, significa que não ocorreu estouro; se não for igual, significa estouro, devendo ser retornado 0.

Código 2:

int reverse(int x){
    int i=0, output=0, x_len=0, flag=1;
    if(x==-2147483648) return 0;
    if(x<0){
        x = (-1)*x;
        flag = -1;
    }
    x_len = ceil(log10((long int)x+1));
    for(i=0;i<x_len;i++){
        output += (x%10)*pow(10,x_len-i-1);
        x /= 10;
        }
    if(output < 0) return 0;
    return flag*output;
}

Esse código é mais problemático de lidar e o custo de tempo e espaço é maior, portanto não é tão bom quanto o código 1.

おすすめ

転載: blog.csdn.net/diqiudq/article/details/123522982