Jump to content
cristidm

Nevoie de feedback la exercitiul 3-4 din K&R

Recommended Posts

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;
}
}

Edited by cristidm
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...