当前位置:   article > 正文

《面试准备》进制转换(c++实现)_c++语言从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数

c++语言从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数

1、十六进制转换十进制

问题描述:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入:
2A
样例输出:
42

代码:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <string.h>
  4. using namespace std;
  5. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  6. long sum = 0;
  7. //16to10
  8. int sixteen_to_ten(string s){
  9. for(int i=0;i<s.size();i++){
  10. if(s[i]>='A')
  11. sum = sum*16+s[i]-'A'+10;
  12. else
  13. sum = sum*16+s[i]-'0';
  14. }
  15. return sum;
  16. }
  17. int main(int argc, char *argv[]) {
  18. string s;
  19. int ten;
  20. cin>>s;
  21. ten = sixteen_to_ten(s);
  22. cout<<ten<<endl;
  23. return 0;
  24. }

测试: 

2、十进制转换八进制 

问题描述:给定n个十六进制正整数,输出它们对应的八进制数。
输入格式:
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式:
  输出n行,每行为输入对应的八进制正整数。

样例输入:
42
样例输出:
52

代码:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <string.h>
  4. using namespace std;
  5. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  6. long n;
  7. char data[8] = {'0','1','2','3','4','5','6','7'};
  8. //10to8
  9. void ten_to_eight(int ten){
  10. char buf[10];
  11. while(ten>=8){
  12. buf[n++] = data[ten%8];
  13. ten = ten/8;
  14. }
  15. buf[n] = data[ten%8];
  16. for(int i=n;i>=0;i--){
  17. cout<<buf[i];
  18. }
  19. cout<<endl;
  20. }
  21. int main(int argc, char *argv[]) {
  22. int ten;
  23. cin>>ten;
  24. ten_to_eight(ten);
  25. return 0;
  26. }

 测试:

 3、十六进制转换八进制 

问题描述:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入:
2A
样例输出:
52

方法:先将十六进制转为十进制,再将十进制转为8进制

代码:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <string.h>
  4. using namespace std;
  5. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  6. long sum = 0,n;
  7. char data[8] = {'0','1','2','3','4','5','6','7'};
  8. //16to10
  9. int sixteen_to_ten(string s){
  10. for(int i=0;i<s.size();i++){
  11. if(s[i]>='A')
  12. sum = sum*16+s[i]-'A'+10;
  13. else
  14. sum = sum*16+s[i]-'0';
  15. }
  16. return sum;
  17. }
  18. //10to8
  19. void ten_to_eight(int ten){
  20. char buf[10];
  21. while(ten>=8){
  22. buf[n++] = data[ten%8];
  23. ten = ten/8;
  24. }
  25. buf[n] = data[ten%8];
  26. for(int i=n;i>=0;i--){
  27. cout<<buf[i];
  28. }
  29. cout<<endl;
  30. }
  31. int main(int argc, char *argv[]) {
  32. string s;
  33. int ten;
  34. cin>>s;
  35. ten = sixteen_to_ten(s);
  36. //cout<<ten<<endl;
  37. ten_to_eight(ten);
  38. return 0;
  39. }

测试: 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/244575
推荐阅读
相关标签
  

闽ICP备14008679号