请高手教我读下这个C程序

来源:百度知道 编辑:UC知道 时间:2024/05/09 04:00:28
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
char str[N];
unsigned long int n;
change(n)
{int a[N],i,t,m;
if(n!=0)
{for(i=0;i<N&&n!=0;i++)
{a[i]=n%2;
n=n/2;}
m=i;
for(i=0;i<(m+1)/2;i++)
{t=a[i];a[i]=a[m-1-i];a[m-1-i]=t;}
printf("BIN:");
for(i=0;i<m;i++)
{printf("%d",a[i]);}
printf("\n");}
else
printf("BIN:0\n");
}

int getnum(char c)
{
int j;
char str0[16]="0123456789ABCDEF";
for(j=0;j<16;j++)
{
if(str0[j]==c)
break;
}
return(j);
}
unsigned long any_to_dec(char _num[N],int radix)
{int i;
unsigned int y;
unsigned long dec=0;
y=strlen(_num);
y--;
for(i=0;_num[i]!=NULL;i++,y--)
{
dec=dec+(getnum(_num[i])*pow(radix,y));
}
return(dec);
}
main()
{

change(n)
这个函数是用来进行十进制转二进制的

int getnum(char c)
将一位2,8,10,16进制值转为相应的十进制值

unsigned long any_to_dec(char _num[N],int radix)
任意进制数转无符号十进制数

main()
{
int radix;
char ch;

loop:printf("Please input the radix of the number(2,8,10,16):\n");
scanf("%d",&radix); //输入在2,8,10,16中的一个数,
switch(radix)
{
case 2:loop2:printf("BIN:");//如果输入的是2则输入一个二进制数
scanf("%s",str);
n=any_to_dec(str,radix); //调用any_to_dec函数,将此二进制数转为十进制数
if(n>4294967295) //如果转为十进制数后的值大于4294967295,就输出"Data error!"然后要求重新输入
{printf("Data error!");
goto loop2;}
printf("DEC:%ld\n",n);//否则输出转为十进制数的十进制值
printf("OCT:%lo\n",n); //八进制值
printf("HEX:%lX\n",n); //十六进制值
printf("1.Press ESC to return to the main\n");
printf("2.Press any key to exit.\n");