Reverse integer i sprawdzenie zakresu

0

Witam
mam do napisania funkcję, która odwraca cyfry w liczbie typu int w zakresie od [2^-31, 2^31-1] . Liczba wejściowa jest zawsze poprawną liczbą typu int w podanym zakresie
I w tym nie byłoby nic trudnego gdyby nie to, że jeśli liczba odwrotna przekroczy zakres mam zwrócić zero, przy założeniu, że środowisko nie pozwala przechowywać liczb 64 bitowych ze znakiem i bez znaku. Nie wiem jak sprawdzić czy zakres został przekroczony

int reverse(int x){
    int result=0;
	int temp = x;
	while (x != 0)
	{
		result = result * 10 + x % 10;
		x /= 10;
	}
    return result;
}

jeśli po przypisaniu do result sprawdzam czy przekroczył zakres i jeśli faktycznie przekroczył serwer wyrzuca mi błąd, że zakres został przekoroczony

1

Przed przemnożeniem result przez 10 sprawdź, czy jest mniejszy niż INT_MAX/10 (a jak jest równy, to czy nowa cyfra jest ≤ INT_MAX%10)

0

Przy okazji tylko jedno dzielenie na obrót petli.

int reverse(int value)
{
    int65_t result=0;
    for(int next=0;value;result=(result-next)*10+value,value=next) next=value/10;
    return result>INT_MAX?0:(int)result;
}
0

Serwer prawodpodobnie nie pozwala mi sprawdzić warunku

int reverse(int x)
{
	int result = 0;
	while (x != 0)
	{
		if (result < INT_MAX / 10||result>INT_MIN/10)	
			result = result * 10 + x % 10;
		else
			return 0;
		x /= 10;
	}
	return result;
}

dla tego kodu dostaję komunikat z serwera
Line 9: Char 23: runtime error: signed integer overflow: 964632435 * 10 cannot be represented in type 'int' [solution.c]
linia 9 to result = result *10 + x%10

0
gonskabalbinka napisał(a):

Serwer prawodpodobnie nie pozwala mi sprawdzić warunku

Ponieważ warunek masz większa lub mniejsza.
Więc zwrócisz 0 tylko kiedy dokładnie pasuje (co jest nie możliwe dla każdego ewentualnego rozmiaru int)

1 użytkowników online, w tym zalogowanych: 0, gości: 1