Salut, de ceva vreme m-am apucat sa rezolv exercitii din k&r si cred mi-as folosi mult mai util timpul daca mi-ar mai da si alti cate un sfat pe codul scris de mine, asa mai invat din greseli. Va rog, daca nu va dereanjeaza, sa-mi spuneti ce credeti despre rezolvarea mea. Crerinta: IN A TWO'S COMPLEMENT NUMBER REPRESENTATION, OUR VERSION OF itoa DOES NOT HANDLE THE LARGEST NEGATIVE NUMBER, THAT IS, THE VALUE OF n EQUAL TO -(2^(wordsize-1)). EXPLAIN WHY NOT. MODIFY IT TO PRINT THAT VALUE CORRECTLY, REGARDLESS OF THE MACHINE ON WHICH IT RUNS. Rezolvare: Ideaa este in felul urmator, valoarea absoluta a celui mai mic numar in 2-s complement va fi intodeauna mai mare decat cea mai mare. Ceva de genul |min|> max sau |min| - 1 == max. Snippetul original postat de autor in carte converteste variabila n in numar pozitiv daca vede ca aceasta este negativa. Eu am ales sa o las negativa si sa convertesc rezultatul operatiei modulo. In versiunea mea, exercitiul se gaseste la pagina 78. #include <stdio.h> #include <string.h> #include <limits.h> void itoa(int n, char s[]); void reverse(char s[]); int main() { char s[230]; itoa(INT_MIN, s); printf("%s", s); return 0; } void itoa(int n, char s[]) { int sign, i; sign = (n < 0) ? -1 : 1; i = 0; do{ s[i++] = (n % 10) * sign + '0'; } while((n /= 10) != 0); if(sign < 1) { s[i++] = '-'; } s[i] = '\0'; reverse(s); } void reverse(char s[]) { int i, j; int temp; for(i = 0, j = strlen(s) - 1; i < j; i++, j--) { temp = s[i]; s[i] = s[j]; s[j] = temp; } }