diff options
author | garhve <git@garhve.com> | 2022-12-05 19:43:39 +0800 |
---|---|---|
committer | garhve <git@garhve.com> | 2022-12-05 19:43:39 +0800 |
commit | c6bc541ab58363d783e60a007e80e9bf9e231fda (patch) | |
tree | a59c7ed0d05225c5876f3e5e919d4f6ed0c447ff /c/dataStructure/baseConversion.c |
initialize
Diffstat (limited to 'c/dataStructure/baseConversion.c')
-rwxr-xr-x | c/dataStructure/baseConversion.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/c/dataStructure/baseConversion.c b/c/dataStructure/baseConversion.c new file mode 100755 index 0000000..8f7bd46 --- /dev/null +++ b/c/dataStructure/baseConversion.c @@ -0,0 +1,71 @@ +// default base is decimal to binary +// run program with flag to start with different base + +#include<stdio.h> +#include<stdlib.h> + +typedef struct stack { + int * base; + int top; + int size; +} Stack; + +void getSpace(Stack * s) +{ + if (s->size == 0) + { + s->size = 1; + s->base = (int *) calloc (s->size,sizeof(int)); + } + else + { + s->size += 1; + s->base = (int *) realloc (s->base, sizeof(int) * s->size); + } +} + +void conversion(Stack * s, int from, int to) +{ + while (from != 0) + { + if (s->size <= s->top) + getSpace(s); + s->base[s->top++] = from % to; + from /= to; + } +} + +void print(Stack * s, int from) +{ + printf("origin\t\tbinary\n"); + printf("%d\t\t",from); + while (s->top != 0) + printf("%d",s->base[--s->top]); + s->top = 0; + putchar('\n'); +} + +int getNumber(void) +{ + int tmp; + + if (scanf("%d", &tmp) != 1) + exit(EXIT_SUCCESS); + return tmp; +} + +int main(void) +{ + Stack storage = {NULL, 0, 0}; + + int from = getNumber(); + int to = 2; + + conversion(&storage,from,to); + + print(&storage,from); + + free(storage.base); + + return 0; +} |