我想计算在0到65535之间的文本输入中有多少二进制文件
。在代码中:变量$ a包含0到65535之间的正整数。
我在这里提供了一个解决方案。 什么是最好的解决方案? 请给我你的建议
的functions.php
<?php
require_once './config.php';
/**
* provides the number of "1" digits in the binary conversion of a decimal
* number
* @param int $a
* @return int
*/
function get_ones_from_binary_presentation_of_decimal($a) {
if(!is_numeric($a)) {
return false;
}
if($a < 0 OR $a > MAX_INT) {
return -1;
}
$binary = decbin($a);
$one_count = strlen(preg_replace('/0/', '', $binary));
return $one_count;
}
function get_ones($ones) {
return ($ones == 1) ? "one" : "ones";
}
$basic_int = ($post['fromInt']) ? $post['fromInt'] : DECIMAL_NUMBER;
$ones = get_ones_from_binary_presentation_of_decimal($basic_int);
if (!$ones) {
print '"' . $basic_int . '" is not a number.';
}
else if ($ones == -1) {
print 'Please choose a number between 0 and 65535!';
}
else {
print $basic_int . ' contains binary ' . $ones . ' ' . get_ones($ones);
}
/**
* sanitzes arrays recoursively like GET or POST
*/
function sanitize($elem) {
if (!is_array($elem)) {
$elem = htmlentities($elem, ENT_QUOTES, "UTF-8");
} else {
foreach ($elem as $key => $value) {
$elem[$key] = sanitize($value);
}
}
return $elem;
}
的index.php
<?php
require_once './config.php';
$post = sanitize($_POST);
if ($post['submitted'] == 1) {
$int = $post['fromInt'];
}
else {
$int = DECIMAL_NUMBER;
}
?>
<html>
<head>
<title>Binary ONEs</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="../css/frontend.css" />
</head>
<body>
<form method="post" action="<?php print $_SERVER['PHP_SELF'] ?>">
<label for="fromInt">Integer (bis 65.535): </label>
<input id="fromInt" name="fromInt" size="5" value="<?php print $int ?>" />
<input type="submit" name="submit" id="submit" value="Calculate" />
<input type="hidden" name="submitted" value="1" />
</form>
<div id="out"><?php include 'functions.php'; ?></div>
</body>
</html>
的config.php
<?php
// Decimal to binary number
define('DECIMAL_NUMBER', 21);
// integert-limit
define('MAX_INT', 65535);
答案 0 :(得分:0)
您的问题是: 我想计算在0到65535之间的文本输入中有多少二进制'1'。(...)什么是最佳解决方案?请给我你的推荐
该问题的答案是:
echo substr_count(decbin(rand(0, 65535)), 1);
其中rand
函数被您的已清理输入替换。
请注意,我没有接受您的清理程序,因为我认为您将使其适应您的代码。
如果不完全符合您的要求,请提供更多详细信息。