描述 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
输入描述:
输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,处理多组输入的问题。输出描述: 输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:
0xA
0xAA
输出:
10
170
Solution
version1麻烦版
#include<iostream>
using namespace std;
int main(){
char a[20]={0};
long num,b;
while(cin>>a){
num = 0;
int i = 0;
while(a[i]!='\0'){
i++;
}
i = i-2;
//按照位置转换
for(int ii = 0;ii<i;ii++){
//数字字符0~9 的ASCII码值为48~57
if(a[ii+2]<=57&&a[ii+2]>=48)
b = a[ii+2] - 48;
//大写字母A~F的ASCII码值为65~70
if(a[ii+2]>=65&&a[ii+2]<=70)
b = a[ii+2] - 55;
//按位累加
num = num*16 + b;
}
cout<<num<<endl;
}
return 0;
}
version2
#include<bits/stdc++.h>
using namespace std;
int main() {
string str;
while(cin >> str) {
int res = 0;
for(int i = str.size() - 1; i > 1; i --) {
if(isdigit(str[i])) res += (str[i] - '0') * pow(16, str.size() - i - 1);
else res += (str[i] - 'A' + 10) * pow(16, str.size() - i - 1);
}
cout << res << endl;
}
return 0;
}
Tips:数字字符0-9的ASCII码值为48~57,写字母A-F的ASCII码值为65-70,或使用’0’或’A’来减。