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; }