给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。
当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。
若 M 为负数,应在结果中保留负号。
数据范围:
要求:空间复杂度
,时间复杂度
7,2
"111"
10,16
"A"
class Solution { public: /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { // write code here if (M == 0) return "0"; bool f = false; if (M < 0) { M = -M; f = true; } char zf[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; string a; while (M) { a.insert(a.begin(), zf[M % N]); M /= N; } if (f) a.insert(a.begin(), '-'); return a; } };
#include <errno.h> #define OK 1 #define ERROR -1 #define INF 0X3F3F3F3F #define NOT ! #define DEFAULT_CAPACITY 8 #define InitStack(S) __InitStack(S, DEFAULT_CAPACITY) typedef int Status; // #################### 顺序栈存储结构表示与实现 #################### typedef int SElemType; typedef struct { SElemType* base; SElemType* top; size_t capacity; } SqStack; Status __InitStack(SqStack* S, int initialCapacity) { if (initialCapacity < 1) { printf("__InitStack ERROR: The initailCapacity %d Must be > 0!", initialCapacity); return ERROR; } if (!((*S).base = (SElemType*) malloc(initialCapacity * sizeof(SElemType)))) { printf("__InitStack Memory Overflow: %s\n", strerror(errno)); abort(); } (*S).top = (*S).base; (*S).capacity = initialCapacity; return OK; } int StackEmpty(SqStack* S) { return (*S).top == (*S).base; } int StackFull(SqStack* S) { return (*S).top - (*S).base == (*S).capacity; } size_t StackLength(SqStack* S) { return (*S).top - (*S).base; } void __large_capacity(SqStack* S) { if (!((*S).base = (SElemType*) realloc((*S).base, (S->capacity << 1) * sizeof(SElemType)))) { printf("__large_capacity Memory Overflow: %s\n", strerror(errno)); abort(); } (*S).top = (*S).base + (*S).capacity; } Status Push(SqStack* S, SElemType e) { if (StackFull(S)) __large_capacity(S); // *S->top++ = e; *(*S).top++ = e; return OK; } Status Pop(SqStack* S, SElemType* ret) { if (StackEmpty(S)) { puts("Pop ERROR: The stack is empty!"); return ERROR; } *ret = *--S->top; return OK; } SElemType GetTop(SqStack* S) { if (StackEmpty(S)) return (-INF); return *((*S).top - 1); } Status DestroyStack(SqStack* S) { free((*S).base); (*S).top = NULL; return OK; } // #################### 顺序栈存储结构表示与实现 #################### // 进制符号表 (字符常量 -- 即不存储在栈区也不存储在堆区,而是存储在静态区!) static const char* SIGN = "ABCDEF"; // 10 - 15 /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ // Iterative char* solve(const int M, const int N) { char* ans = (char*) calloc(50, sizeof(char)); int x = abs(M), ansSize = 0, num; SqStack S; InitStack(&S); // 从低位到高位入栈 while (x) { Push(&S, x % N); x /= N; } if (M < 0) *(ans + ansSize++) = '-'; // 从高位到低位输出 while (NOT StackEmpty(&S)) { Pop(&S, &num); *(ans + ansSize++) = num >= 10 ? SIGN[num - 10] : num + 48; } return ans; } void conversion(int n, const int m, char* ans, int* ansSize) { // recursion exit conditon if (n == 0) return; conversion(n / m, m, ans, ansSize); *(ans + (*ansSize)++) = n % m >= 10 ? SIGN[n % m % 10] : n % m + 48; } // Recursive char* solveII(const int M, const int N) { char* ans = (char*) calloc(50, sizeof(char)); int x = abs(M), ansSize = 0; if (M < 0) *(ans + ansSize++) = '-'; conversion(x, N, ans, &ansSize); return ans; }
import java.util.*; public class Solution { /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ public String solve (int M, int N) { if(M==0){ return "0"; } char[] nums = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; StringBuilder sb = new StringBuilder(); boolean flag = M<0; M = Math.abs(M); while(M>0){ sb.append(nums[M%N]); M/=N; } String res = sb.reverse().toString(); return flag?"-"+res:res; } }
class Solution { public: /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { // write code here string res = ""; string digit = "0123456789ABCDEF"; bool flag = true; if(M < 0){ M = -M; flag = false; } while(M){ res.push_back(digit[M%N]); M = M/N; } if(!flag) res.append("-"); reverse(res.begin(), res.end()); return res; } };
# # 进制转换 # @param M int整型 给定整数 # @param N int整型 转换到的进制 # @return string字符串 # class Solution: def __init__(self): self.support = {10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"} def solve(self , M , N ): # write code here if M==0&nbs***bsp;N==0: return str(0) result = [] # 记录原始数据 以便后面判断正负 num = M M = abs(M) while M!=0: rem = M%N if rem>=10: result.append(self.support[rem]) else: result.append(rem) M = int(M/N) num_str = "".join([str(x) for x in result[::-1]]) if num<0: return "-"+num_str else: return num_str
class Solution { public: /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { string res; bool flag = false; if (M < 0) { M = -M; flag = true; } const char* a = "0123456789ABCDEF"; while (M != 0) { res = a[M % N] + res; M /= N; } if (flag) { res = "-" + res; } return res; } };
/** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ function solve( M , N ) { // write code here let str = ''; let absn = Math.abs(M); const keyMap = {10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F'}; while(absn > 0) { let s = absn%N; if(keyMap[s]) { str += keyMap[s]; } else { str += s; } absn = Math.floor(absn/N) } const dest = str.split('').reverse().join('') || '0'; return M >= 0 ? dest : '-' + dest ; } module.exports = { solve : solve };
class Solution { public: /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { // write code here string ans; bool flag=0; if(M<0) { M=-M; flag=1; } const char t[]={"0123456789ABCDEF"}; while(M!=0) { ans=t[M%N]+ans; M/=N; } if(flag) ans='-'+ans; return ans; } };
import java.util.*; public class Solution { // 因为要考虑到 余数 > 9 的情况,2<=N<=16. public static final String[] F = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ public String solve (int M, int N) { //要考虑 M 为负数的情况 Boolean flag = false; if(M < 0) { flag = true; M *= -1; } StringBuffer sb = new StringBuffer(); int temp; while(M != 0) { temp = M % N; sb.append(F[temp]); M = M / N; } // 字符串反转 sb.reverse(); return (flag ? "-" : "") + sb.toString(); } }
import java.util.*; public class Solution { public String solve (int M, int N) { if(M == 0) return "0"; boolean flag = true; if(M < 0){ M = - M; flag = false; } StringBuffer res = new StringBuffer(); String hex = "0123456789ABCDEF"; while(M != 0){ res.append(hex.charAt(M % N)); M = M / N; } return flag == true ? res.reverse().toString() : "-"+res.reverse().toString(); } }
class Solution { public: /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { // write code here int flag=0; char ch[20]{"0123456789ABCDEF"}; if(M<0){flag=1;M=-M;} stack<char> s; while(M){ s.push(ch[M%N]); M/=N; } string str=""; while(!s.empty()){ str=str+s.top(); s.pop(); } if(flag){ str='-'+str; } return str; } };
#include <iterator> #include <string> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { string s,table="0123456789ABCDEF"; bool flag=false; if(M<0) { M=-M; flag=true; } //核心逻辑 while(M) { int temp=M%N; s+=table[temp]; M/=N; } if(flag) { s+="-"; } reverse(s.begin(),s.end()); return s; } };
public static String solve (int M, int N) { int num = M; StringBuffer sb = new StringBuffer(); boolean flag = true; if(num < 0) { num = -num; flag = false; } while(num > 0) { int a = num % N; if(a > 9) { char b = (char) (a - 10 + 'A'); sb.append(b); }else { sb.append(a); } num = num / N; } String result = String.valueOf(sb.reverse()); if(!flag) { result = "-" + result; } return result; }
class Solution: supplement = {10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F'} def solve(self , M , N ): result = "" minus = False # 要考虑正负号,不然会死循环 if M < 0: minus = True M = -M while M != 0: r = M % N if 10 <= r < 16: result += Solution.supplement[r] else: result += str(r) M //= N if minus: return "-" + result[::-1] else: return result[::-1]
public String solve(int M, int N) { if (M == 0) return "0"; boolean isNegative = M < 0; M = Math.abs(M); StringBuilder result = new StringBuilder(); char[] digits = "0123456789ABCDEF".toCharArray(); while (M >= N) { result.insert(0, digits[M % N]); M /= N; } result.insert(0, M); return (isNegative ? "-" : "") + result; }
#include <algorithm> #include <string> class Solution { public: string solve(int M, int N) { string ans; string data; data="0123456789ABCDEF"; int flag=0; if(M<0){ flag=1; M=abs(M); } while (M/N) { int temp=M%N; ans+=data[temp]; M=(M-temp)/N; } if(M>0){ ans+=data[M]; } if(flag==1){ ans+="-"; } reverse(ans.begin(), ans.end()); return ans; } };
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ public String solve (int M, int N) { // write code here String t = "0123456789ABCDEF"; boolean isNegative = false; if(M < 0){ M = -M; isNegative = true; } StringBuilder sb = new StringBuilder(); while(M != 0){ sb.append(t.charAt(M % N)); M = M / N; } String res = sb.reverse().toString(); if(isNegative){ res = "-" + res; } return res; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ public String solve (int M, int N) { // write code here StringBuilder sb = new StringBuilder(); char ops = '+'; if(M < 0) { ops = '-'; M = -M; } int jinwei = 0; while(M > 0) { int digit = M % N + jinwei; jinwei = digit / N; digit = digit % N; if(digit < 10) sb.append(String.valueOf(digit)); else sb.append((char) ('A' + digit - 10)); M = M/N; } if(jinwei != 0) sb.append(String.valueOf(jinwei)); if(ops == '-') sb.append('-'); return sb.reverse().toString(); } }