十六进制转十进制怎么转(十六进制怎么转十进制)
【问题描述】
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
【样例输入】
FFFF
【样例输出】
65535
【解题思路】
下面C++和JAVA的代码分析:
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
C代码:注意数据类型设置,转换后的十进制数需要long long 型。输出使用格式控制符 %I64d。
【C 参考代码】
1#include<stdio.h>
2#include<string.h>
3int main(void)
4{
5 char s[20],hex[20];
6 int i,j;
7 long long num;
8 gets(s);
9 /* 取出字符串中的十六进制字符 */
10 for(i=0,j=0;s[i]!='\0';i++)
11 {
12 if(s[i]>='0'&&s[i]<='9'||s[i]>='A'&&s[i]<='F')
13 {
14 hex[j]=s[i];
15 j++;
16 }
17 }
18 hex[j]='\0';
19 /* 十六进制转十进制 */
20 num=0;
21 for(i=0;hex[i]!='\0';i++)
22 {
23 if(hex[i]>='0'&&hex[i]<='9')
24 num=num*16+hex[i]-'0';
25 else if(hex[i]>='A'&&hex[i]<='F')
26 num=num*16+hex[i]-'A'+10;
27 }
28 printf("%I64d\n",num);
29 return 0;
30}
【C++ 参考代码】
1#include <bits/stdc++.h>
2using namespace std;
3int main() {
4 string s;
5 cin >> s;
6 long long n = 0;
7 for (int i = s.size() - 1, power = 1; ~i; i--, power *= 16) {
8 if (s[i] >= 'A' && s[i] <= 'Z') {
9 n += 1LL * (s[i] - 'A' + 10) * power;
10 }
11 else {
12 n += 1LL * (s[i] - '0') * power;
13 }
14 }
15 cout << n << '\n';
16 return 0;
17}
【Java 参考代码】
1import java.util.*;
2
3public class Main {
4 public static void main(String[] args) {
5 String s = new Scanner(System.in).nextLine();
6 long n = 0;
7 for (int i = s.length() - 1, power = 1; i >= 0; i--, power *= 16) {
8 if (s.charAt(i) >= 'A' && s.charAt(i) <= 'F') {
9 n += (long)(s.charAt(i) - 'A' + 10) * power;
10 }
11 else {
12 n += (long)(s.charAt(i) - '0') * power;
13 }
14 }
15 System.out.println(n);
16 }
17}
本文地址:百科问答频道 https://www.neebe.cn/wenda/903200.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!