金山(Kingsoft)筆試面試題整理之004
阿新 • • 發佈:2019-02-19
題目1:將一個N進位制數轉換成M進位制數
/*還有bug,暫時存檔*/ /*******************************************/ /*將一個n進位制的數轉換成m進位制的數,並輸出. 在10進位制以上的數中A代表10,B代表11,以此類推。*/ /********************************************/ #include <stdio.h> #include <string.h> int N = 11, M = 2; /*冪函式,實現N^k*/ int mypower(int N, int k) { int i, sum = 1; for (i = 1; i <= k; i++) { sum *= N; } return sum; } /*將N進位制數轉換成十進位制數,其中字串s表示原N進位制數.*/ int NtoD(const char *s) { int i, sum = 0; int len = strlen(s); for (i = len - 1; i >= 0; i--) { sum += mypower(N, len-1-i) * (s[i] - 'A' + 10); } return sum; } /*將十進位制數轉換為M進位制,其中字串s存放轉換後的M進位制數*/ void DtoM(int x, char *stack) { int top = 0; while (x) { if (x % M > 9) { stack[top++] = x % M - 10 + 'A'; } else { stack[top++] = x % M; } x /= M; } /*將棧stack中存放的M進位制數輸出*/ printf("M: \n"); while (top > 0) { printf("%c", stack[--top]); } printf("\n"); } /*N to M */ void NtoM(char *s) { int x = NtoD(s); char stack[100]; DtoM(x, stack); } int main(void) { char sN[10] = {1, 2, 'A', 0}; NtoM(sN); }