Как перевести число из 10 ой системы счисления в любую другую на C
У меня есть задача перевести заданные числа 10ой СС в 16ую и еще в несколько соответсвенных СС. Также мне нельзя использовать непосредственно printf для перевода чисел. Проблема заключается в том, что при выводе итоговых значений появляются некоторые лишние знаки. Кроме того при попытке перевода моим способом последенго числа типа unsigned int происходит ошибка segmentation fault. Подскажите пожалуйста, что не так и как это исправить.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
short x = -2722;
int y = -564856834;
unsigned int z= 1594148744;
long w = 1003399198;
unsigned long k = 2218572624;
//short/16>>34
short xx1 = abs(x), xx2 = abs(x);
int i11 = -1, i12 = -1;
while(xx1>0){
xx1 = xx1/16;
i11++;
}
while(xx2>0){
xx2 = xx2/34;
i12++;
}
short x1 = abs(x);
short x2 = abs(x);
char b11[100];
while(x1>0){
int p11 = x1%16;
if(p11<10){
b11[i11] = x1%16 + '0';
x1 = x1/16;
i11--;
}
else{
b11[i11] = x1%16 + '7';
x1= x1/16;
i11--;
}
}
char b12[100];
while(x2>0){
int p12 = x2%34;
if(p12<10){
b12[i12] = x2%34 + '0';
x2 = x2/34;
i12--;
}
else{
b12[i12] = x2%34 + '7';
x2 = x2/34;
i12--;
}
}
printf("short;-%s=-%s;34 \n", b11 , b12);
//int/16>>6
int yy1 = abs(y), yy2 = abs(y);
int i21 = -1, i22 = -1;
while(yy1>0){
yy1 = yy1/16;
i21++;
}
while(yy2>0){
yy2 = yy2/6;
i22++;
}
int y1 = abs(y);
int y2 = abs(y);
char b21[100];
while(y1>0){
int p21 = y1%16;
if(p21<10){
b21[i21] = y1%16 + '0';
y1 = y1/16;
i21--;
}
else{
b21[i21] = y1%16 + '7';
y1= y1/16;
i21--;
}
}
char b22[100];
while(y2>0){
int p22 = y2%6;
if(p22<10){
b22[i22] = y2%6 + '0';
y2 = y2/6;
i22--;
}
else{
b22[i22] = y2%6 + '7';
y2= y2/6;
i22--;
}
}
printf("int;-%s=-%s;6 \n", b21 , b22);
//unsigned int/16>>31
unsigned int zz1 = z, zz2 = z;
int i31 = -1, i32 = -1;
while(zz1>0){
zz1 = zz1/16;
i31++;
}
while(zz2>0){
zz2 = zz2/31;
i32++;
}
unsigned int z1 = z;
unsigned int z2 = z;
char b31[100];
while(z1>0){
int p31 = z1%16;
if(p31<10){
b31[i31] = z1%16 + '0';
z1 = z1/16;
i31--;
}
else{
b31[i31] = z1%16 + '7';
z1= z1/16;
i31--;
}
}
char b32[100];
while(z2>0){
int p32 = z2%31;
if(p32<10){
b32[i32] = z2%31 + '0';
z2 = z2/31;
i32--;
}
else{
b32[i32] = z2%31 + '7';
z2 = z2/31;
i32--;
}
}
printf("unsigned int;%s=%s;31 \n", b31 , b32);
//long/16>>7
long ww1 = w, ww2 = w;
int i41 = -1, i42 = -1;
while(ww1>0){
ww1 = ww1/16;
i41++;
}
while(ww2>0){
ww2 = ww2/7;
i42++;
}
long w1 = w;
long w2 = w;
char b41[100];
while(w1>0){
int p41 = w1%16;
if(p41<10){
b41[i41] = w1%16 + '0';
w1 = w1/16;
i41--;
}
else{
b41[i41] = w1%16 + '7';
w1= w1/16;
i41--;
}
}
char b42[100];
while(w2>0){
int p42 = w2%7;
if(p42<10){
b42[i42] = w2%7 + '0';
w2 = w2/7;
i42--;
}
else{
b42[i42] = w2%7 + '7';
w2 = w2/7;
i42--;
}
}
printf("long;%s=%s;7 \n", b41 , b42);