#include
#include
#include
void ten_two(int);
void ten_eight(int);
void ten_sixten(int);
void two_ten(int);
void two_eight(int);
void two_sixten(int);
void eight_two(int);
void eight_ten(int);
void eight_sixten(int);
void sixten_two(char r[], int k);
void sixten_ten(char r[], int k);
void sixten_eight(char r[], int k);
int main(void)
{
int i, j, number = 0;
int temp;
char change[10];
printf("=============================================================\n");
printf(" 欢 迎 使 用 进 制 转 换 程 序 \n");
printf(" 作 者:李 研 时 间:2009 年7 月5 日 \n");
printf("=============================================================\n");
do
{
temp = 0;
//fflush(stdin);
printf("\n请选择转换前的进制:\n2二进制\n8八进制\n10十进\n16十六进制\n0退出\n");
printf("转换前的进制是:");
scanf("%d", &i);
switch (i)
{
case 2:
printf("\n请选择转换后的进制:\n2二进制\n8八进制\n10十进\n16十六进制\n0退出\n");
printf("转换后的进制是:");
scanf("%d", &j);
switch(j)
{
case 2:
printf("\n同进制之间不用转化!\n");
temp = 1;
break;
case 8:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
two_eight(number);
temp = 1;
break;
case 10:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
two_ten(number);
temp = 1;
break;
case 16:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
two_sixten(number);
temp = 1;
break;
case 0:
printf("谢谢使用!!");
}
break;
case 8:
printf("\n请选择转换后的进制:\n2二进制\n8八进制\n10十进\n16十六进制\n0退出\n");
printf("转换后的进制是:");
scanf("%d", &j);
switch(j)
{
case 8:
printf("\n同进制之间不用转化!\n");
temp = 1;
break;
case 2:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
eight_two(number);
temp = 1;
break;
case 10:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
eight_ten(number);
temp = 1;
break;
case 16:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
eight_sixten(number);
temp = 1;
break;
case 0:
printf("谢谢使用!!");
}
break;
case 10:
printf("\n请选择转换后的进制:\n2二进制\n8八进制\n10十进\n16十六进制\n0退出\n");
printf("转换后的进制是:");
scanf("%d", &j);
switch(j)
{
case 10:
printf("\n同进制之间不用转化!\n");
temp = 1;
break;
case 2:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
ten_two(number);
temp = 1;
break;
case 8:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
ten_eight(number);
temp = 1;
break;
case 16:
printf("\n请输入您想要转化的数:");
scanf("%d", &number);
ten_sixten(number);
temp = 1;
break;
case 0:
printf("谢谢使用!!");
}
break;
case 16:
printf("\n请选择转换后的进制:\n2二进制\n8八进制\n10十进\n16十六进制\n0退出\n");
printf("转换后的进制是:");
scanf("%d", &j);
switch(j)
{
case 16:
printf("\n同进制之间不用转化!\n");
temp = 1;
break;
case 2:
printf("\n请输入您想要转化的数:");
fflush(stdin);
gets(change);
for(number = 0;; number++)
{
if(change[number] == '\0')
break;
}
sixten_two(change, number);
temp = 1;
break;
case 8:
printf("\n请输入您想要转化的数:");
fflush(stdin);
gets(change);
for(number = 0;; number++)
{
if(change[number] == '\0')
break;
}
sixten_eight(change, number);
temp = 1;
break;
case 10:
printf("\n请输入您想要转化的数:");
fflush(stdin);
gets(change);
for(number = 0;; number++)
{
if(change[number] == '\0')
break;
}
sixten_ten(change, number);
temp = 1;
break;
case 0:
printf("谢谢使用!!");
}
break;
case 0:
printf("\n谢谢使用!\n");
}
}
while(temp == 1);
return 0;
}
/*以下为: 二进制转换为十进制,八进制,十六进制.*/
void two_ten(int a)
{
int i, s = 0;
int result = 0;
for(i = 1; a != 0; i *= 2)
{
if(a % 10 > 1)
{
s = 1;
break;
}
else
{
result += (a % 10) * i;
a = a / 10;
}
}
if(s == 1)
printf("您的输入有误!请重新输入\n");
else
printf("\n转换后的数为:%d\n", result);
}
void two_eight(int a)
{
int i, j, k, s = 0;
int p[30];
int result = 0;
for(i = 1; a != 0; i *= 2)
{
if(a % 10 > 1)
{
s = 1;
break;
}
else
{
result += (a % 10) * i;
a = a / 10;
}
}
for(j = 0; result != 0; j++)
{
p[j] = result % 8;
result = result / 8;
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%d", p[k]);
}
printf("\n");
}
}
void two_sixten(int a)
{
int i, j, k, s = 0;
char p[30];
int result = 0;
for(i = 1; a != 0; i *= 2)
{
if(a % 10 > 1)
{
s = 1;
break;
}
else
{
result += (a % 10) * i;
a = a / 10;
}
}
for(j = 0; result != 0; j++)
{
p[j] = result % 16;
result = result / 16;
if (p[j] > 10)
{
switch(p[j])
{
case 10:
p[j] = 'A';
break;
case 11:
p[j] = 'B';
break;
case 12:
p[j] = 'C';
break;
case 13:
p[j] = 'D';
break;
case 14:
p[j] = 'E';
break;
case 15:
p[j] = 'F';
break;
}
}
else p[j] += 48;
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%c", p[k]);
}
printf("\n");
}
}
/*以下为: 八进制转换为二进制,十进制,十六进制.*/
void eight_two(int a)
{
int i, j, k, s = 0;
int result = 0;
int p[30];
for(i = 1; a != 0; i *= 8)
{
if(a % 10 > 7)
{
s = 1;
break;
}
else
{
result += (a % 10) * i;
a = a / 10;
}
}
for(j = 0; result != 0; j++)
{
p[j] = result % 2;
result = result / 2;
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%d", p[k]);
}
printf("\n");
}
}
void eight_ten(int a)
{
int i, s = 0;
int result = 0;
for(i = 1; a != 0; i *= 8)
{
if(a % 10 > 7)
{
s = 1;
break;
}
else
{
result += (a % 10) * i;
a = a / 10;
}
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:%d\n", result);
}
}
void eight_sixten(int a)
{
int i, j, k, s = 0;
char p[30];
int result = 0;
for(i = 1; a != 0; i *= 8)
{
if(a % 10 > 7)
{
s = 1;
break;
}
else
{
result += (a % 10) * i;
a = a / 10;
}
}
for(j = 0; result != 0; j++)
{
p[j] = result % 16;
result = result / 16;
if(p[j]
p[j] += 48;
else
{
switch(p[j])
{
case 10:
p[j] = 'A';
break;
case 11:
p[j] = 'B';
break;
case 12:
p[j] = 'C';
break;
case 13:
p[j] = 'D';
break;
case 14:
p[j] = 'E';
break;
case 15:
p[j] = 'F';
break;
}
}
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%c", p[k]);
}
printf("\n");
}
}
/*以下为: 十六进制转换为十进制,二进制,八进制.*/
void sixten_ten(char a[], int k)
{
int i, j, s = 0;
int result = 0;
int b[50];
for(i = 0; i
{
if(a[i] <= '9' && a[i] >= '1')
{
b[i] = a[i] - 48;
}
else
{
switch(a[i])
{
case 'A':
b[i] = 10;
break;
case 'B':
b[i] = 11;
break;
case 'C':
b[i] = 12;
break;
case 'D':
b[i] = 13;
break;
case 'E':
b[i] = 14;
break;
case 'F':
b[i] = 15;
break;
case 'a':
b[i] = 10;
break;
case 'b':
b[i] = 11;
break;
case 'c':
b[i] = 12;
break;
case 'd':
b[i] = 13;
break;
case 'e':
b[i] = 14;
break;
case 'f':
b[i] = 15;
break;
default:
s = 1;
}
}
}
for(i = 1, j = k - 1; j >= 0; j--, i *= 16)
{
result += b[j] * i;
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:%d", result);
}
}
void sixten_two(char a[], int k)
{
int i, j, s = 0;
int result = 0;
int b[50];
int p[30];
for(i = 0; i
{
if(a[i] <= '9' && a[i] >= '1')
b[i] = a[i] - 48;
else
{
switch(a[i])
{
case 'A':
b[i] = 10;
break;
case 'B':
b[i] = 11;
break;
case 'C':
b[i] = 12;
break;
case 'D':
b[i] = 13;
break;
case 'E':
b[i] = 14;
break;
case 'F':
b[i] = 15;
break;
case 'a':
b[i] = 10;
break;
case 'b':
b[i] = 11;
break;
case 'c':
b[i] = 12;
break;
case 'd':
b[i] = 13;
break;
case 'e':
b[i] = 14;
break;
case 'f':
b[i] = 15;
break;
default:
s = 1;
}
}
}
for(j = k - 1, i = 1; j >= 0; j--, i *= 16)
{
result += b[j] * i;
}
for(j = 0; result != 0; j++)
{
p[j] = result % 2;
result = result / 2;
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%d", p[k]);
}
printf("\n");
}
}
void sixten_eight(char a[], int k)
{
int i, j, s = 0;
int result = 0;
int b[30];
int p[30];
for(i = 0; i
{
if(a[i] <= '9' && a[i] >= '1')
b[i] = a[i] - 48;
else
{
switch(a[i])
{
case 'A':
b[i] = 10;
break;
case 'B':
b[i] = 11;
break;
case 'C':
b[i] = 12;
break;
case 'D':
b[i] = 13;
break;
case 'E':
b[i] = 14;
break;
case 'F':
b[i] = 15;
break;
case 'a':
b[i] = 10;
break;
case 'b':
b[i] = 11;
break;
case 'c':
b[i] = 12;
break;
case 'd':
b[i] = 13;
break;
case 'e':
b[i] = 14;
break;
case 'f':
b[i] = 15;
break;
default:
s = 1;
}
}
}
for(j = k - 1, i = 1; j >= 0; j--, i *= 16)
{
result += b[j] * i;
}
for(j = 0; result != 0; j++)
{
p[j] = result % 8;
result = result / 8;
}
if(s == 1)
printf("It is wrong\n");
else
{
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%d", p[k]);
}
printf("\n");
}
}
/*以下为: 十进制转换为二进制,八进制,十六进制.*/
void ten_two(int a)
{
int j, k;
int p[30];
for(j = 0; a != 0; j++)
{
p[j] = a % 2;
a = a / 2;
}
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%d", p[k]);
}
printf("\n");
}
void ten_eight(int a)
{
int j, k;
int p[30];
for(j = 0; a != 0; j++)
{
p[j] = a % 8;
a = a / 8;
}
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%d", p[k]);
}
printf("\n");
}
void ten_sixten(int a)
{
int j, k;
int p[30];
for(j = 0; a != 0; j++)
{
p[j] = a % 16;
a = a / 16;
if(p[j]
p[j] += 48;
else
{
switch(p[j])
{
case 10:
p[j] = 'A';
break;
case 11:
p[j] = 'B';
break;
case 12:
p[j] = 'C';
break;
case 13:
p[j] = 'D';
break;
case 14:
p[j] = 'E';
break;
case 15:
p[j] = 'F';
break;
}
}
}
printf("\n转换后的数为:");
for(k = j - 1; k >= 0; k--)
{
printf("%c", p[k]);
}
printf("\n");
}