From f4dcb9e585d331c6bccccd42daedda18222ef672 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Wed, 15 Jun 2022 12:34:06 +0530 Subject: add 4.13.c --- 4.13.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 4.13.c (limited to '4.13.c') diff --git a/4.13.c b/4.13.c new file mode 100644 index 0000000..b470a13 --- /dev/null +++ b/4.13.c @@ -0,0 +1,66 @@ +#include +#include + +#define MAXLEN 15 + +void reverse(char str[], size_t left, size_t right); +char* itoa(int n, char str[]); +void swap(char array[], int i, int j); + +int +main(void) +{ + int n = 42069; + char str[MAXLEN]; + + printf("%d\n", n); + printf("%s\n", itoa(n, str)); + + return 0; +} + +void +reverse(char str[], size_t left, size_t right) +{ + if (left >= right) + return; + + swap(str, left, right); + reverse(str, left+1, right-1); +} + +char* +itoa(int n, char str[]) +{ + int sign, i; + + /* to include the most -ve int */ + n = ((sign = n) < 0) ? -(n+1) : n-1; + + i = 0; + do { + str[i++] = n%10 + '0'; + } while ((n /= 10) > 0); + + if (sign <0) + str[i++] = '-'; + + /* part of "to include the most -ve int" */ + str[0] += 1; + str[i] = '\0'; + + reverse(str, 0, strlen(str)-1); + + return str; +} + +void +swap(char array[], int i, int j) +{ + int temp; + + temp = array[i]; + + array[i] = array[j]; + array[j] = temp; +} -- cgit v1.2.3