summaryrefslogtreecommitdiff
path: root/c/dataStructure/baseConversion.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/dataStructure/baseConversion.c')
-rwxr-xr-xc/dataStructure/baseConversion.c71
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;
+}