m進制轉爲n進制(0

首先,將m進制轉爲10進制,然後在將10進制轉爲n進制;(都用輾轉相除法)

#include <iostream>
using namespace std;
void mToN(char* src, int m, char* dest, int n);
void reverseString(char *s);
int main() {
    char A[100] = { 0 };
    mToN("35", 10, A, 10);
    puts(A);
}

/*
    src爲m進制字符串
    m爲原進制
    dest爲目的字符串
    n爲目的進制
*/
void mToN(char* src, int m, char* dest, int n) {
    if (src == NULL) {
        return;
    }
    int count = 0;
    char* tmp = dest;  //不能改變首地址
    //先轉化爲10進制,逆着輾轉相除
    while (*src != '\0') {
        count = count*m + *src - '0';
        src++; //直到字符串讀完
    }
    int length = 0;
    //輾轉相除,轉爲n進制,逆着存儲
    while (count != 0) {
        *tmp = count%n + '0';
        count /= n;
        tmp++;
    }
//  puts(dest);
    //逆過來
    reverseString(dest);

}

/*
    字符串逆序
*/
void reverseString(char *s) {
    char* p = s; //p指向字符串頭部

    //q指向字符串尾部
    char* q = s;
    while (*q) {
        q++;
    }
    q--; //指向最後一位

    while (q > p) {
        char ch = *q;
        *q = *p;
        *p = ch;
        p++;
        q--;

    }

}

說明:m和n都是10以內的數,如果大於10需要涉及到字母,可以在準換中進行判斷,例如

if(*src == 'A')  {
      int a = 11;
      count = i*m + a;
 }

將10進制轉化爲n時,可以參考另一篇:http://blog.csdn.net/u011040361/article/details/46290775

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章