[编程问题]二进制转换
3/3 [编程问题]进制变换
时间限制: C/C 1秒,其他语言2秒
空间限制: C/C 32M、其他语言64M
编写程序,接受十六进制数,并输出该数值的十进制表示。 (多组同时输入)
输入说明:
输入十六进制数值字符串。
输出说明:
输出此数值的十进制字符串。
输入示例1:
0xA
输出示例1:
10
个人方法
十六进制- -十进制的想法:例如0x209
如果去掉“ox”,则剩下209(3位(个-9、十-0、百-2) )。
十进制数=2 16^2 0 16^1 9 16^0=521
python :
#! /usr/axdjc/env python2
#-* -编码: utf-8-* -
''''
2020年03月04日
@author: oucbl
''''
#十进制十六进制
#defdeC2hex(dnum ) :
# hexNum=[] # 16十六进制字符串(逆序/堆栈) )
#
# while dnum=0:
# mod16=dnum % 16
# hex num.append (str (hex 16 [ mod 16 ] ) )
# dnum /=16
#
# if dnum==0 :
# break
#
# hex num='0x ' '.join ([ cforcinhexnum [ :3360-1 ] ) )
# return hexNum
#十六进制旋转十进制
defhex2dec(hnum ) :
decnum=0 # 10进制
hnum=hnum[2:] #删除前两位的标识符
Lenth=Len(hnum ) #十六进制长度
forIinrange(Lenth ) :
bNum=lenth - i -1 #位
weight=16 ** bNum #权重
bvalue=hex16.index(hnum[I] )位值
decnum =weight * bValue
return decnum
if __name__=='__main__':
HEX16=['0','1','2','3','4','5','6','7','8','9',
' a ',' b ',' c ',' d ',' e ',' F'] #进制和十进制对照表
try:
while True:
n=raw_input(#python2接收非数字字符
IFstr(n )=='' :
布莱克
printhex2dec(n ) #用十六进制数转十进制数
except:
通过
c :
/*******************************。
Author: oucbl
Date: 2020.03.05
******************************
#包含
#包含
using namespace std;
intcharindex(charc )//查找数组元素的位置
{
string HEX16='0123456789ABCDEF ';//十六进制和十进制对照表
int idx=0; //元素位置
for(intj=0; j 16; j )
{
if(c==hex16[j] ) )
{
idx=j;
布雷克;
}
}
return idx;
}
longhex2dec(stringhex_str ) /十六进制转换为十进制
{
long decnum=0;//十进制
int len=hex_str.length (; //(十六进制)字符数组的长度
for(intj=2; j len; j )//从第二个元素开始扫描
{
int bNum=len - j -1; //位数
longweight=pow(16,bNum ); //权重
intbvalue=charindex(hex_str[j] ); //位值
decnum =weight * bValue;
}
返回de cnum;
}
int main () )
{
字符串hex;
//cin获取整行,空行结束循环
wile(Getline(CIN,hex ) )
{
if(hex.length ()==0) ) ) ) ) ) ) ) )。
布雷克;
出局
}
返回0;
}
优秀的分析
1 .内置变换(python ) )
while True:
try:
打印(int (input ),16 ) )
except:
布莱克
2 .内置转换器(c ) )。
#包含
using namespace std;
int main () )
{
int a;
wile () (CinHexa ) }
cout a endl;
}
返回0;
}
/*
* C输出十六进制数为cout hex a;
*八进制为cout oct a;
*/
3 .内置转换器(c ) )。
#包含
int main ()。
int a;
while(Scanf ) ' %x ',a )!=EOF )
printf(%d(n ),a );
返回0;
}
4 .内置转换(java )。
/*
直接调用Java的解码方法。
此方法的作用是将字符串解码为整数。 接受十进制、十六进制、八进制。
根据要解码的string(Mn )的形式转换为不同的进制数。 mn由符号、基数描述符和字符串三部分组成。 -0X123中-是符号位,0X是基数说明符(0是八进制,0X,0X,#是十六进制,如果什么都不写就意味着十进制),123是数字字符串。
*/
import java.util.Scanner;
public class Main {
publicstaticvoidmain (string [ ] args ) throws Exception{ )。
sannersc=newscanner(system.in;
while(sc.Hasnext ) ) ) )。
String str=sc.next (;
system.out.println (integer.decode (str ) );
}
}
}