1、进制转换
2、二进制数大小
3、最大值-多进制转10进制数比较
4、10进制转多进制
1、进制转换
#include<stdio.h>
#include<string.h>
#define N 32
void convert(int n, char str[]);
int main(){
int n;
scanf("%d",&n);
char num[N]={'0'};
convert(n,num);
int k = 0;
for(int i=31;i>=0;i--){
if(num[i]=='1'){
k = i;
break;
}
}
for(int i=k;i>=0;i--){
printf("%c",num[i]);
}
return 0;
}
void convert(int n, char str[]){
for(int i=0;n!=0;i++){
sprintf(str+i,"%d",n%2);//注意,使用sprintf(指针,被转换对象的格式,转换对象);
n = n/2;
}
}
2、二进制数大小
#include<stdio.h>
#define N 30
int bToD(char str[]);
int main(){
char num1[N],num2[N],num3[N];
scanf("%s%s%s",num1,num2,num3);
int a=bToD(num1),b=bToD(num2),c=bToD(num3);
int temp;
if(a>b){
temp = a;
a = b;
b = temp;
}
if(a>c){
temp = a;
a = c;
c = temp;
}
if(b>c){
temp = b;
b = c;
c = temp;
}
printf("%d %d %d",a,b,c);
return 0;
}
int bToD(char str[])
{
//函数返回二进制数str对应十进制整数
int sum = 0;
for(int i=0;str[i]!='\0';i++){
sum = sum*2+(str[i]-'0');//str[i]-'0'把每一位字符转换为对应数字。
}
return sum;
}
3、最大值-多进制转10进制数比较
#include<stdio.h>
#define N 32
int KToD(char str[], int k);
int main(){
int n;
scanf("%d",&n);
char num[N];
int k;
int max = 0;
while(n!=0){
getchar();
scanf("%s%d",num,&k);
if(KToD(num,k)>max)max = KToD(num,k);
n--;
}
printf("%d",max);
return 0;
}
int KToD(char str[], int k)
{
//函数返回k进制数str对应十进制整数
int d = 0;
for(int i=0;str[i]!='\0';i++){
d = d*k+(str[i]-'0');
}
return d;
}
4、10进制转多进制
#include<stdio.h>
#include<string.h>
#define N 32
void dToK(int n, int k, char str[]);
int main(){
int n;
scanf("%d",&n);
char num[N];
dToK(n,2,num);
for(int i=strlen(num)-1;i>=0;i--){
printf("%c",num[i]);
}
printf("\n");
dToK(n,3,num);
for(int i=strlen(num)-1;i>=0;i--){
printf("%c",num[i]);
}
printf("\n");
dToK(n,7,num);
for(int i=strlen(num)-1;i>=0;i--){
printf("%c",num[i]);
}
printf("\n");
dToK(n,8,num);
for(int i=strlen(num)-1;i>=0;i--){
printf("%c",num[i]);
}
return 0;
}
void dToK(int n, int k, char str[])
{
//将n转化为k进制数,存入str
for(int i=0;n!=0;i++){
sprintf(str+i,"%d",n%k);
n = n/k;
}
// strrev(str);
// printf("%s\n",str);
}