题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:输入一个十六进制的数值字符串。
输出描述:输出该数值的十进制字符串。
输入:0xA
输出:10
解题思路:
解题代码:
1.这种解法是转换为数字,其实是不符合题意的,题意要求输出为十进制字符串,而且转化为数值会有大数问题,会有溢出。因此正确的做法为字符串操作。
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
while(cin>>s){
int length = s.size();
if(length <= 2)
continue;
if(s[0]!='0' || s[1]!='x')
continue;
int res =0;
int flag =1;
for(int i=length-1;i>1;--i){
char cur = s[i];
if(cur>='A'&&cur<='F'){
res+=(cur-'A'+10)*flag;
}
else if(cur>='0' && cur<='9'){
res+=(cur-'0')*flag;
}
// else
// continue;
flag*=16;
}
cout<<res<<endl;
}
return 0;
}
2.
补充知识:关于进制转换和ASCII码的知识!!!
【1】关于大小写转换,A到a,不需要记A(65)的ASCII码与a(97)的ASCII码的差值32.可以直接:
小写转换大写为:str[i]-('a'-'A')
大写转为小写为:str[i]+('a'-'A')
【2】进制转换问题,如上面的思想,如果用数值计算的方法则:可以从高位到低位,也可以从低位到高位计算累加。
简单的方法是设置个flag位表示每个数位的权值。