n进制转化为m进制
n进制转化为m进制
最开始看到这个题的时候,我还在想有没有什么方法可以直接从n进制转化为m进制,但是我放弃了,所以还是使用了一步一步来的方法。
首先将n进制转化为10进制,再将10进制转化为m进制。
#include <iostream>using namespace std;//将n进制转化为10进制
int NTOD(char *now_number,int now_base_system)
{int sum = 0, weight = 1;int len = strlen(now_number);for (int i = len - 1; i >= 0; i--){if (now_number[i] >= 'A' && now_number[i] <= 'Z'){sum = sum + (now_number[i] - 'A' + 10) * weight;}else if (now_number[i] >= 'a' && now_number[i] <= 'z'){sum = sum + (now_number[i] - 'a' + 10) * weight;}else if (now_number[i] >= '0' && now_number[i] <= '9'){sum = sum + (now_number[i] - '0') * weight;}weight = weight * now_base_system;}return sum;
}
//将10进制转化为m进制
void DTOM(int ten_base_system_number, int want_To_base_system, char* wang_to_number)
{int m = 0, r;do{r = ten_base_system_number % want_To_base_system;if (r >= 10){wang_to_number[m++] = r - 10 + 'A';}elsewang_to_number[m++] = r + '0';ten_base_system_number /= want_To_base_system;} while (ten_base_system_number != 0);wang_to_number[m] = '\0';for (int i = 0, j = m - 1; i < j; i++, j--){char t = wang_to_number[i];wang_to_number[i] = wang_to_number[j];wang_to_number[j] = t;}
}
int main(int argc, char* argv[])
{int now_base_system, want_To_base_system;char now_number[100], wang_to_number[100];cout << "输入数字现在的进制、数字值、想要转换的进制" << endl;cin >> now_base_system;cin >> now_number;cin >> want_To_base_system;int ten_base_system_number = NTOD(now_number, now_base_system);DTOM(ten_base_system_number, want_To_base_system, wang_to_number);cout << "转换后的结果为: " << wang_to_number << endl;system("pause");return 0;
}
运行结果: