c语言:各种进制之间的相互转换
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 32
int MD(int s,char *str)
{
int m=0;
while(*str){
if(*str>='a'&&*str<='f')
m=s*m+*str-'a'+10;
else if(*str>='A'&&*str<='F')
m=s*m+*str-'A'+10;
else
m=s*m+*str-'0';
str++;
}
return m;
}
void reverse(char *s)
{
int i,j;
char c;
for(i=0,j=strlen(s)-1;i<j;i++,j--){
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
char * exch(int srcs,char *str,int s)
{
int m,i,num;
char *t=(char *)malloc(N);
i=0;
m=MD(srcs,str);
do{
if(m%s<10)
t[i++]=m%s+'0';
else
t[i++]=m%s-10+'A';
}while((m/=s)!=0);
if(s>=10){
t[i++]='X';
t[i]='0';
}
reverse(t);
return t;
}
int main(void)
{
int srcs,ds;
char s[N];
#if 1
printf("给出一个整数:\n");
scanf("%s",s);
printf("它的进制是:\n");
scanf("%d",&srcs);
printf("十进制结果是:\n");
printf("%d\n\n",MD(srcs,s));
#endif
printf("给出一个整数:\n");
scanf("%s",s);
printf("它的进制是:\n");
scanf("%d",&srcs);
printf("要转换成的进制是:\n");
scanf("%d",&ds);
printf("转换之后结果是:\n");
printf("%s\n",exch(srcs,s,ds));
return 0;
}
#include <string.h>
#include <stdlib.h>
#define N 32
int MD(int s,char *str)
{
int m=0;
while(*str){
if(*str>='a'&&*str<='f')
m=s*m+*str-'a'+10;
else if(*str>='A'&&*str<='F')
m=s*m+*str-'A'+10;
else
m=s*m+*str-'0';
str++;
}
return m;
}
void reverse(char *s)
{
int i,j;
char c;
for(i=0,j=strlen(s)-1;i<j;i++,j--){
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
char * exch(int srcs,char *str,int s)
{
int m,i,num;
char *t=(char *)malloc(N);
i=0;
m=MD(srcs,str);
do{
if(m%s<10)
t[i++]=m%s+'0';
else
t[i++]=m%s-10+'A';
}while((m/=s)!=0);
if(s>=10){
t[i++]='X';
t[i]='0';
}
reverse(t);
return t;
}
int main(void)
{
int srcs,ds;
char s[N];
#if 1
printf("给出一个整数:\n");
scanf("%s",s);
printf("它的进制是:\n");
scanf("%d",&srcs);
printf("十进制结果是:\n");
printf("%d\n\n",MD(srcs,s));
#endif
printf("给出一个整数:\n");
scanf("%s",s);
printf("它的进制是:\n");
scanf("%d",&srcs);
printf("要转换成的进制是:\n");
scanf("%d",&ds);
printf("转换之后结果是:\n");
printf("%s\n",exch(srcs,s,ds));
return 0;
}
...全文


