-
十进制与其他进制(2-9进制)的相互转换 (C语言)
2006年03月16日
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://mathon.blogbus.com/logs/2075836.html
的相互转换%20(C语言)%20风月王朝%20-%20powered%20by%20phpwind_net.files/top_l.gif)
的相互转换%20(C语言)%20风月王朝%20-%20powered%20by%20phpwind_net.files/top_r.gif)
#include
#includevoid oth_to_ten(void);/*其他进制转换为十进制*/
void ten_to_oth(void);/*十进制转换为其他进制*/
int char_to_num(char ch);/*把输入的字符转换为数字*/
int squ(int num, int i);/*计算每一位的权值*/int main( void )
{
int flag;do{
puts("please get a choice:");
puts("Enter 1 to choose ten_to_oth \nEnter 0 to choose oth_to_ten");
scanf("%d",&flag);
}while(flag !=0 && flag !=1);
if(flag == 1)
ten_to_oth(); /*十进制转换为其他进制*/
else
oth_to_ten(); /*其他进制转换为十进制*/
system("pause");
return 0;
}
void ten_to_oth(void) /*十进制转换为其他进制*/
{
int sum, n, j, i=0;
int arr[80];
printf("输入一个十进制数: ");
scanf("%d", &sum);
do{
printf("\n输入你想要的进制 : ");
scanf("%d", &n);
}while(n<2 || n>10);
do{
i++;
arr=sum%n; /*从下标 1 开始计数*/
sum=sum/n;
if(i >= 80)
exit(1);
}while(sum != 0);
printf("你输入了:\t");
for(j=i; j>0; j--)
printf("%d",arr[j]);
}
void oth_to_ten(void) /*其他进制转换为十进制*/
{
int n, j, i=0,num;
long sum=0;
int arr2[80];
char ch,arr1[80];
do{
printf("\n你想把几进制数转换为十进制 : ");
scanf("%d", &n);
}while(n<2 || n>10);
printf("请输入一个 %d 进制数: ",n);
fflush(stdin);
ch=getchar();
while(ch != '\n')
{
while(ch<48 || ch>=n+48)
ch=getchar(); /*输入非数字或错误数字即无效*/
i++;
arr1=ch;
ch=getchar();
}printf("你输入了 : ");
for(j=1; j<=i; j++)
printf("%c",arr1[j]);
printf("\n");
for(i=0,j=j-1; j>=1; j--,i++)
{
arr2[j]=char_to_num(arr1[j]); /*把输入的字符转换为数字*/
sum+=arr2[j]*squ(n,i); /*把每一位的值求出然后相加*/
}
printf("你输入的数字转化为十进制为 : %ld",sum);
}
int char_to_num(char ch) /*把输入的字符转换为数字*/
{
int num;
num=(int)ch-48;
return num;
}
int squ(int num, int i) /*计算每一位的权值*/
{
long sum;
if(i == 0)
return 1;
else
sum=num*squ(num,i-1);
return sum;
}
我将此程序,其他进制数改为十进制数时进行了优化,把两个函数集中为一个,算法上有所改进。
/*十进制与其他进制(2-9进制)的相互转换,程序能够自动帮助用户纠正输入错误*/#include
#includevoid oth_to_ten(void);/*其他进制转换为十进制*/
void ten_to_oth(void);/*十进制转换为其他进制*/
long char_to_num(char a[], int len, int n);/*把输入的字符转换为数字*/int main( void )
{
int flag;do{
puts("please get a choice:");
puts("Enter 1 to choose ten_to_oth \nEnter 0 to choose oth_to_ten");
scanf("%d",&flag);
}while(flag !=0 && flag !=1);
if(flag == 1)
ten_to_oth(); /*十进制转换为其他进制*/
else
oth_to_ten(); /*其他进制转换为十进制*/
system("pause");
return 0;
}
void ten_to_oth(void) /*十进制转换为其他进制*/
{
int sum, n, j, i=0;
int arr[80];
printf("输入一个十进制数: ");
scanf("%d", &sum);
do{
printf("\n输入你想要的进制 : ");
scanf("%d", &n);
}while(n<2 || n>10);
do{
i++;
arr=sum%n; /*从下标 1 开始计数*/
sum=sum/n;
if(i >= 80)
exit(1);
}while(sum != 0);
printf("你输入了:\t");
for(j=i; j>0; j--)
printf("%d",arr[j]);
}
void oth_to_ten(void) /*其他进制转换为十进制*/
{
int n, j, i, num;
long sum=0;
int arr2[80];
char ch, c, arr1[80], *parr1;
parr1=arr1;
do{
printf("\n你想把几进制数转换为十进制 : ");
scanf("%d", &n);
}while(n<2 || n>10);
printf("请输入一个 %d 进制数: ",n);
fflush(stdin);
ch=getchar();
i=0;
while(ch != '\n')
{
while(ch<48 || ch>=n+48)
ch=getchar(); /*输入非数字或错误数字即无效*/
i++;
arr1=ch;
ch=getchar();
}
printf("你输入了 : ");
for(j=1; j<=i; j++)
printf("%c",arr1[j]);
printf("\n");
sum=char_to_num(parr1, i, n);
printf("你输入的数字转化为十进制为 : %ld",sum);
}
long char_to_num(char a[], int len, int n) /*把输入的字符转换为数字*/
{
long num=0;
int k=1;
for(int i=len; i>=1; i--)
{
num += int(a-'0')*k;
k *= n;/*k表示权值*/
}
return num;
}随机文章:
指针:我眼中的指针--学习指针不可少的好文章 2006年05月08日FPGA的开发经验学习~ 2006年04月17日二进制格雷码与自然二进制码的互换 2006年03月19日UART中接收程序的理解 2006年04月20日异步FIFO结构及FPGA设计 2006年03月19日
收藏到:Del.icio.us





