m进制转为n进制(0<m,n<=10)

首先,将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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值