[转载]C语言描述进制转换器v1.0源代码
文章作者:PrOve[code]/********************************************/
/* 进制转换器v1.0 */
/* Designed by PrOve */
/* 2005-6-25 */
/********************************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<dos.h>
char str[40];/*str数组存要转换的数*/
int a,b; /*a为该数的进制,b为要转换的进制*/
int n; /*n为字符串长度*/
int num[40]; /*全局变量存储由字符串转化的数字*/
int temp[40];
/*----------------------界面----------------------*/
void win()
{
int i;
printf("\n");
printf("\t\t********************************************\n");
printf("\t\t* *\n");
printf("\t\t* DigitTransformTool v1.0 *\n");
printf("\t\t* *\n");
printf("\t\t* Designed by PrOve *\n");
printf("\t\t* Copyright 2005-6-25 *\n");
printf("\t\t* *\n");
printf("\t\t********************************************\n");
for(i=1;i<=20;i++)
{
randomize();
i=30+rand()%(100-20);
sound(10*i);
delay(3000);
nosound();
}
printf("\n");
input();
}
/*----------------------End-----------------------*/
/*-------------------输入函数---------------------*/
input()
{
printf("Please input digit:");
scanf("%s",str);
printf("Please input the unit of this digit:");
scanf("%d",&a);
printf("Please input the unit you want to transform:");
scanf("%d",&b);
}
/*---------------------End-------------------------*/
/*------------其他进制转化为10进制-----------------*/
long int ot_dec(int a[],int b)/*a数组为要转化的数,b为a的进制数*/
{
int i,j=0;
long int decimal=0;
for(i=n-1;i>=0;i--)
{
decimal+=a[j]*pow(b,i);
j++;
}
return decimal;
}
/*-------------------End--------------------------*/
/*-------------10进制转其他进制-------------------*/
void dec_ot(long a,long b) /*a为10进制数,b为要转化的进制*/
{
long c;
int i=0;
do
{
c=a%b;
temp[ i]=c;
i++;
}while((a/=b)!=0);
for(i--;i>=0;i--)
{
if(b==16&&(temp[ i]>=10&&temp[ i]<=15))
printf("%c",temp[ i]+55);
else
printf("%d",temp[ i]);
}
printf("\n");
}
/*---------------------End-------------------------*/
/*------------------错误输入的处理-----------------*/
int error_pro(char s[])
{
int i;
for(i=0;i<strlen(s);i++)
if((s[ i]>='A'&&s[ i]<='F')||(s[ i]>='0'&&s[ i]<='9')||(s[ i]>='a'||s[ i]<='f'))
{
if(a==10&&(s[ i]<'0'||s[ i]>'9'))/*10进制数输入错*/
{
printf("Error!Input again!\n");
input();
return 1;
}
else if(a==8&&(s[ i]<'0'||s[ i]>'7'))/*8进制数输入错*/
{
printf("Error!Input again!\n");
input();
return 1;
}
else if(a==2&&(s[ i]!='0'&&s[ i]!='1'))/*2进制数输入错*/
{
printf("Error!Input again!\n");
input();
return 1;
}
else if((b!=2&&b!=8&&b!=10&&b!=16)||(a==b))
{
printf("Error!Input again!\n");
input();
return 1;
}
}
else
{
printf("Error!Input again!\n");
input();
return 1;
}
}
/*----------------------End------------------------*/
/*-----------------进制转换函数--------------------*/
void transform(char s[],int a,int b)
{
int i,j,k;
/*char c;*/
long int two,eight,ten,sixteen;
/*-------------错误处理--------------------*/
while(!error_pro(str))
input();
/*---------------End-----------------------*/
/*-------------字符转化为数字--------------*/
for(i=0,n=strlen(s);i<strlen(s);i++)
{
if(s[ i]>='A'&&s[ i]<='F')/*A~F的字母转化*/
num[ i]=s[ i]-55;
else if(s[ i]>='a'&&s[ i]<='f')
num[ i]=s[ i]-87;
else /* 数字的转化 */
num[ i]=s[ i]-48;
}
/*------------------End--------------------*/
/*----------------进制转换-----------------*/
switch(a)
{
/*-------2进制数的转化-----------*/
case 2:two=ot_dec(num,2);
switch(b)
{
case 8 :dec_ot(two,8);break;
case 10:dec_ot(two,10);break;
case 16:dec_ot(two,16);break;
}break;
/*------------End----------------*/
/*-------8进制数的转化-----------*/
case 8:eight=ot_dec(num,8);
switch(b)
{
case 2 :dec_ot(eight,2 );break;
case 10:dec_ot(eight,10);break;
case 16:dec_ot(eight,16);break;
}break;
/*------------End----------------*/
/*-------10进制数的转化----------*/
case 10:ten=ot_dec(num,10);
switch(b)
{
case 2 :dec_ot(ten,2);break;
case 8 :dec_ot(ten,8);break;
case 16:dec_ot(ten,16);break;
}break;
/*------------End----------------*/
/*-------16进制数的转化----------*/
case 16:sixteen=ot_dec(num,16);
switch(b)
{
case 2 :dec_ot(sixteen,2 );break;
case 8 :dec_ot(sixteen,8 );break;
case 10:dec_ot(sixteen,10);break;
}break;
/*------------End----------------*/
default:printf("Input error!\n"); break;
}
/*--------------------------End------------------------------*/
/* printf("\nQuit or Not 'Y'/'N' ?");
c=getchar();
getchar();
if(c=='n')
transform(s,a,b);
else if(c=='y')
exit(0);*/
}
/*--------------------------End------------------------------*/
/*----------------Main-------------*/
main()
{
int c;
win();
transform(str,a,b);
/*printf("\nQuit or Not 'Y'/'N' ?");
c=getchar();
c=getchar();
while(c=='n')
transform(str,a,b);*/
getch();
}
/*----------------End-------------*/[/code]
页:
[1]