题目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);
}