资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
题目分析 :
1.考验进制转换
2.16转10进制为:
从末尾开始记为0,s[i]*pow(16,0);
从末尾加一记为1,s[i]*pow(16,1);
以此类推
代码如下:
C语言:
#include <stdio.h>
#include <math.h>
#include <string.h>
int main() {
char s[8];
scanf("%s", s);
long long int sum = 0;
int top = 0, last = strlen(s) - 1, i;
for (i = last; i >= 0; i--, top++) {
if (s[i] == 'A') {
sum += 10 * pow(16, top);
} else if (s[i] == 'B') {
sum += 11 * pow(16, top);
} else if (s[i] == 'C') {
sum += 12 * pow(16, top);
} else if (s[i] == 'D') {
sum += 13 * pow(16, top);
} else if (s[i] == 'E') {
sum += 14 * pow(16, top);
} else if (s[i] == 'F') {
sum += 15 * pow(16, top);
} else if (s[i] - '0' <= 9)
sum += (s[i] - '0') * pow(16, top);
}
printf("%ld", sum);
}
C++:
#include <iostream>
#include <math.h>
using namespace std;
int main() {
string s;
cin >> s;
long long int sum = 0;
int top = 0, last = s.length() - 1;
for (int i = last; i >= 0; i--, top++) {
if (s[i] == 'A') {
sum += 10 * pow(16, top);
} else if (s[i] == 'B') {
sum += 11 * pow(16, top);
} else if (s[i] == 'C') {
sum += 12 * pow(16, top);
} else if (s[i] == 'D') {
sum += 13 * pow(16, top);
} else if (s[i] == 'E') {
sum += 14 * pow(16, top);
} else if (s[i] == 'F') {
sum += 15 * pow(16, top);
} else if (s[i] - '0' <= 9)
sum += (s[i] - '0') * pow(16, top);
}
cout << sum;
}