基础练习 十六进制转十进制(ACMORE1565)
题目
Description
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
Input
十六进制数字符串
Output
十进制数
Sample Input
FFFF
Sample Output
65535
Source
蓝桥杯
题目链接: https://acmore.cc/problem/LOCAL/1565
简析
用c语言写的话用for循环一下,每个位乘权值,加起来即可。
用Java写的话,有现成的方法呀
这里顺便说一下java中10进制与16进制的互换:
1、10进制转16进制
int dec = 123;
String hex = Integer.toHexString(dec);
2、16进制转10进制
String hex = "FFFF";
Integer dec = Integer.parseInt(hex, 16);
但是,可能会超出长度限制,所以我们用Java中的BigInteger来处理:
String hex = "FFFF";
BigInteger dec = new BigInteger(hex, 16);
AC的代码
Python版
print(int(input(),16))
Java版
import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(new BufferedInputStream(System.in));
String s = scanner.nextLine();
BigInteger n = new BigInteger(s, 16);
System.out.println(n);
}
}
C版
(可以利用ASCII码优化代码长度)
#include <stdio.h>
#include <string.h>
char six[9];
int main(void)
{
int n, t;
int i, j, k;
long long ten = 0;
long long sixn = 1;
int lensix;
gets(six);
lensix = strlen(six);
for(i = lensix-1; i >= 0; i--){
if(six[i] == '0')
ten += 0*sixn;
else if(six[i] == '1')
ten += 1*sixn;
else if(six[i] == '2')
ten += 2*sixn;
else if(six[i] == '3')
ten += 3*sixn;
else if(six[i] == '4')
ten += 4*sixn;
else if(six[i] == '5')
ten += 5*sixn;
else if(six[i] == '6')
ten += 6*sixn;
else if(six[i] == '7')
ten += 7*sixn;
else if(six[i] == '8')
ten += 8*sixn;
else if(six[i] == '9')
ten += 9*sixn;
else if(six[i] == 'A')
ten += 10*sixn;
else if(six[i] == 'B')
ten += 11*sixn;
else if(six[i] == 'C')
ten += 12*sixn;
else if(six[i] == 'D')
ten += 13*sixn;
else if(six[i] == 'E')
ten += 14*sixn;
else if(six[i] == 'F')
ten += 15*sixn;
sixn *= 16;
}
printf("%lld\n", ten);
return 0;
}