您的位置:首页 > 其它

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

2015-05-31 20:51 239 查看
首先,将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时,可以参考另一篇:/article/8590914.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: