[编程题]进制转换
来源:互联网 发布:oracle linux安装教程 编辑:程序博客网 时间:2024/05/17 02:42
Talk is cheap, show me the code.
一、问题描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子:
0xA
输出例子:
10
二、问题分析
主要难度在于输入的是十六进制字符串,如何将字符串转换成整型数值。
解题方式1:
#include <iostream>#include <string>#include <map>#include <cmath>using namespace std;int main(){ map<char, int> map1; map1['A'] = 10; map1['B'] = 11; map1['C'] = 12; map1['D'] = 13; map1['E'] = 14; map1['F'] = 15; string s; while (cin >> s) { int sum = 0; for (int i = 2; i < s.size(); i++) { if (s[i] <= '9') { sum += (s[i] - '0') * pow(16, (s.size() - 1 -i)); } else { sum += map1[s[i]] * pow(16, (s.size() - 1 - i)); } } cout << sum << endl; } return 0;}
这里其实可以避免使用map,可以直接用 s[i] - ‘A’ + 10 来表示大于9的十六进制数。
时间复杂度是字符串长度。空间复杂度是字符串长度。
解题方式二:
其实C++提供了非常优雅的方式来处理不同进制数的输入输出,即std:hex, std:oct, std:dec等。
#include <iostream>#include <string>using namespace std;int a;while (cin >> hex >> a){ cout << a << endl;} return 0;}
即每次输入输出不同进制数通过先输入输出std::hex(十六进制),std::oct(八进制),std::dec(十进制)来告诉输入输出流对象控制格式。
0 0
- [编程题] 进制转换
- [编程题]进制转换
- [编程题]进制转换
- 2017 京东校招编程题 进制转换
- 华为编程题---进制转换
- 编程挑战-进制转换
- 华为编程题之四:进制转换
- 南邮编程在线编程题十八:进制转换
- 华为研发工程师编程题(3)----进制转换
- [华为编程题] 16进制转换为10进制
- 笔试编程题:(一)进制转换
- 2017华为研发工程师编程题之进制转换
- 华为研发工程师编程题:进制转换 [python]
- 【编程学习】大数进制转换
- 编程算法基础-2.3进制转换
- 华为在线编程系列-进制转换
- 编程练习——进制转换
- 华为研发工程师编程题----进制转换(pow函数,string.find())
- oracel循环插入数据
- 通过Fule9.0推送的OpenStack环境管理BareMetal设备
- 常用的三种异步写法
- AOJ.综合训练.2016-12-8
- java FineReport 数据集的坑
- [编程题]进制转换
- 前端-酷炫上传控件
- Django 安装使用基础
- Java学习路程之File
- 绘制平滑线条的winform窗体
- Ext4使用总结(十) 如何在Ext4 的grid中显示精确到秒的时间
- [真格邦]Myeclipse常用注释模板设置
- 指针和数组(第二节 数组的内存布局 )
- 基于RTX51的单片机软件设计