itob.c |
#include <stdio.h> void itob(char t[], char s[], int b); void reverse(char s[]); int my_strlen(char s[]); int power(int n, int b); int stoi(char s[]); main(){ int c=0; int z=0; char t[8]; char s[8]; int base = 16; printf("\t\tvalues\tbase\n", s); while((c=getchar())!=EOF){ do{ t[z]=c; z++; }while((c=getchar())!='\n'); t[z]='\0'; printf("original:\t%s\t10\n", t); itob(t, s, base); printf("after:\t\t%s\t%d\n\t\t-----------------------\n", s, base); z=0; } /* char s[] = "123"; int i = 123; printf("original:\t%d\n", i); itob(i, s, 16); printf("after:\t%s\n", s); */ return 0; } void itob(char t[], char s[], int b){ int i, r; int y=0; int z=1; int j; int q=0; int n = stoi(t); r=0; for(i=1, j=0; n>0; i++, j++){ y=power(i,b); r=n%y; s[j]=((q=r/z+'0') < 10+'0') ? r/z+'0' : r/z-10+'A'; n-=r; z=y; } s[j]='\0'; reverse(s); } int stoi(char s[]){ int i,j,r; i=1; r=0; for(j=my_strlen(s)-1; j>=0; j--){ r+=((s[j]-'0')*i); i*=10; } // printf("stoi r,strlen,string:\t\t%d\t%d\t%s\n", r,my_strlen(s)-1, s); return r; } void reverse(char s[]){ int c,i,j; for(i=0,j=my_strlen(s)-1; i<j; i++, j--){ c=s[i]; s[i]=s[j]; s[j]=c; } } int my_strlen(char s[]){ int i=0; while(s[i]!='\0') i++; return i; } int power(int i, int b){ int j, p; p=1; if(i>0) for(j=1; j<=i; j++) p=p*b; return p; } |
James Little |