分享错误,学习生活

C++:把一个数从M进制转为N进制。

52yxgame

先给一张ascii的试验图给大家看,显然可见,'0'+10!='A',所以我们要单独创建一个多进制字符表。

多进制字符映射表。

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. string chageMtoN(string&str, int M, int N){
  5. int hashch[256];
  6. for (int i = 0; i <= 9; ++i) hashch['0' + i] = i;
  7. for (int i = 10; i <= 35; ++i) hashch['A' + i-10] = i;
  8. char hashnum[256];
  9. for (int i = 0; i <= 9; ++i) hashnum[i] = '0' + i;
  10. for (int i = 10; i <= 35; ++i) hashnum[i] = 'A' + i-10;
  11. //m进制(数字)字符串转为n进制字符串。(先由m进制转为10进制,再由10进制转为n进制)
  12. int realval = 0;
  13. char maxch = hashnum[M];
  14. for (int i = 0; i < str.size(); ++i){
  15. if (str[i]>maxch) return ;
  16. realval = M*realval + hashch[str[i]];// /* m进制字符串src转为10进制数i */
  17. }
  18. string res;
  19. while (realval){
  20. int cur = realval%N;
  21. res = hashnum[cur] + res;/* 辗转相除得出逆序的n进制表示在res */
  22. realval = realval / N;
  23. }
  24. return res;
  25. }
  26. int main()
  27. {
  28. while (1){
  29. string str;
  30. int M, N;
  31. cin >>str>> M >> N;
  32. cout << chageMtoN(str, M, N) << endl;
  33. }
  34. return 0;
  35. }
52yxgame
nmei\u7f8e\u5973\u56fe\u5e93

暂无评论

发表评论

电子邮件地址不会被公开。