列表

详情


DD5. 进制转换

描述

给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数

输入描述

输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。

输出描述

为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)

示例1

输入:

7 2

输出:

111

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2022-01-21

#include<stdio.h>
#include<math.h>
typedef long long ll;
int main()
{
	ll m, n;
	scanf("%lld%lld", &m, &n);
	if (m == 0)
	{
		printf("0\n");
	}
	if (m < 0)
	{
		printf("-");
		m = -m;
	}
	int t = 0;
	long long tmp = 1;
	while (tmp <= m)
	{
		tmp = tmp*n;
		t++;
	}
	//有t位数
	char a[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
	
	while (t)
	{
		int x = m / pow((double)n, t - 1);
		printf("%c", a[x]);
		m -= x*pow((double)n, t - 1);
		t--;
	}
	printf("\n");
	return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2019-05-30

#include<stdio.h>

char num[17]="0123456789ABCDEF";

void jinzhi(int M,int N)
{
    if(M/N == 0)
    {
        printf("%c",num[M%N]);
    }
    else
    {
        jinzhi(M/N,N);
        printf("%c",num[M%N]);
    }
}
int main()
{
    int M,N;
    scanf("%d %d",&M,&N);
    if(M<0)
    {
        printf("-");
        M = 0-M;
    }
    jinzhi(M,N);
}

C++14 解法, 执行用时: 3ms, 内存消耗: 284KB, 提交时间: 2020-04-16

#include <stdio.h>

using namespace std;

int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
       char k[50];
       int size1=0;
       int n1=(n>0)?n:-n;

       do{
            k[size1++]=((n1%m)>=10?(n1%m)-10+'A':(n1%m)+'0');
            n1/=m;

       }while(n1!=0);
       if(n<0)
       {
           printf("-");
       }
       for(int i=size1-1;i>=0;i--)
       {
           printf("%c",k[i]);
       }
       printf("\n");
    }
    return 0;
}

C 解法, 执行用时: 3ms, 内存消耗: 288KB, 提交时间: 2018-11-23

#include<stdio.h>
#include<string.h>


void covert_number(int decimal,int base,int flag);

int main() {
	int decimal,base;
	int flag=0;

	scanf("%d%d",&decimal,&base);
	
	if(decimal<0) {
		decimal=-1*decimal;
		flag=1;
	}
	covert_number(decimal,base,flag);
	
	return 0;
}

void covert_number(int decimal,int base,int flag) {
	int remain=0,quotient=1,i=0;
	int length=0;
	char str[50]={0};
	
	
	while(quotient) {
		
		remain=decimal%base;
		quotient=decimal/base;
		if(remain>=0&&remain<=9) {
			str[i]=remain+'0';
		}
		
		else if(remain>=10&&remain<=16) {
			str[i]=remain-10+'A';
		}
		
		i++;
		decimal=quotient;
	}
	
	length=strlen(str);
	
	if(flag) {
		printf("-");
	}
	
	for(i=length-1;i>=0;i--) {
		printf("%c",str[i]);
	}
	
	printf("\n");
}

C 解法, 执行用时: 3ms, 内存消耗: 300KB, 提交时间: 2019-02-12

#include<stdio.h>
#include<stdlib.h>
int covent(int base_10,int base_n,char* out)
{
    int i,j;
    i =  j = 0;
    char map[]="0123456789ABCDEF";
    char buf[1024]={0};
    if(base_10 < 0)
    {
        out[j]='-';
        j++;
        base_10 = -1*base_10;
    }
    do{
        
        int loop = base_10 / base_n;
        int index = base_10 % base_n;
        base_10 = loop;
        buf[i] = map[index];        
        i++;
    }while(base_10);
    i--;   
    while(i>=0)
    {
        out[j] = buf[i];
        j++;
        i--;
    }
    out[j]='\0';
    return 0;
}
int main()
{
    
    int number = 0;
    int basen = 0;    
    char out[1024]={0};
    scanf("%d %d",&number,&basen);
    covent(number,basen,out);
    printf("%s",out);
    return 0;
}

上一题