题解 | #进制转换#
进制转换
http://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6
方法一,正向遍历
<?php
fscanf(STDIN, "%s", $str);
$map = [
'0' => 0,
'1' => 1,
'2' => 2,
'3' => 3,
'4' => 4,
'5' => 5,
'6' => 6,
'7' => 7,
'8' => 8,
'9' => 9,
'A' => 10,
'B' => 11,
'C' => 12,
'D' => 13,
'E' => 14,
'F' => 15
];
$ans = 0;
$base = 16;
for($i = 2; $i < strlen($str); $i++) {
$char = $str[ $i ];
$value = $map[ $char ];
$ans = $ans*$base+$value;
}
echo $ans;
方法二,倒着遍历
<?php
fscanf(STDIN, "%s", $str);
$map = [
'0' => 0,
'1' => 1,
'2' => 2,
'3' => 3,
'4' => 4,
'5' => 5,
'6' => 6,
'7' => 7,
'8' => 8,
'9' => 9,
'A' => 10,
'B' => 11,
'C' => 12,
'D' => 13,
'E' => 14,
'F' => 15
];
$ans = 0;
$scale = 1;
for($i = strlen($str)-1; $i >= 2; $i--) {
$char = $str[ $i ];
$value = $map[ $char ];
$ans += $value*$scale;
$scale *= 16;
}
echo $ans;