From 5e79ec231903d0a6098f9729362339677aed2088 Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sat, 4 Dec 2021 13:06:18 +0800 Subject: 3.5 --- 3/5.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 3/5.c (limited to '3') diff --git a/3/5.c b/3/5.c new file mode 100644 index 0000000..b5c833e --- /dev/null +++ b/3/5.c @@ -0,0 +1,63 @@ +#include +#include +#include + +#define MAXLEN 100 + +/* converts n to string in base b representation */ +void itob(int n, char s[], int b); + +int main(int argc, char *argv[]) { + int n, b, c, i; + char s[MAXLEN]; + + printf("Number: "); + for (i = 0; i < MAXLEN - 1 && (c = getchar()) != '\n' && c != EOF; i++) + s[i] = c; + s[i] = 0; + n = atoi(s); + + printf("Base: "); + for (i = 0; i < MAXLEN - 1 && (c = getchar()) != '\n' && c != EOF; i++) + s[i] = c; + s[i] = 0; + b = atoi(s); + + itob(n, s, b); + printf("%d in base %d: %s\n", n, b, s); + + return 0; +} + +void reverse(char s[]) { + int c, i, j; + + for (i = 0, j = strlen(s) - 1; i < j; i++, j--) { + c = s[i]; + s[i] = s[j]; + s[j] = c; + } +} + +void itob(int n, char s[], int b) { + int i, sign; + + i = 0; + sign = n < 0; + + if (n >= 0) { + do { + s[i++] = (n % b) + '0'; + } while ((n /= b) > 0); + } else { + do { + s[i++] = -(n % b) + '0'; + } while ((n /= b) <= -1); + } + + if (sign) + s[i++] = '-'; + s[i] = 0; + + reverse(s); +} -- cgit v1.2.3