资源限制
时间限制: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; }