本文实例讲述了php找出指定范围内回文数且平方根也是回文数的方法。分享给大家供大家参考。具体如下:
一、要求:
给出两个数值X和Y,统计在这个区间里的回文数,并且要求它们的平方根也是回文数。其中 1<= x <= y < 10 14
二、解决方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<?php
error_reporting (E_ALL);
ini_set ( "display_errors" , 1);
//避免超时
set_time_limit(0);
$t1 =microtime();
function isPlalindrome( $num ){
$str = "$num" ;
$len = strlen ( $num );
$k = intval ( $len /2) + 1; //获取中间位数
for ( $j =0; $j < $k ; $j ++){
if ( $str { $j }!= $str { $len -1- $j }){
return false;
}
}
return true;
}
function showPlalindrome( $min , $max ){
//因为要计算在$min,$max间的回文数且其自身平方根也是回文数
//所以相当于求一sqrt($min)~sqrt($max)间数
//其平方在$min~$max间也是回文数
//$min~$max是连续正整数,所以可以这样缩小很多计算量,否则……
$start =sqrt( $min );
$end =sqrt( $max );
for ( $i = $start ; $i < $end ; $i ++){
if (isPlalindrome( $i ) &&isPlalindrome( $n = $i * $i ) ){
echo $n . " <br/>" ;
}
}
}
showPlalindrome(1,100000000000000);
$t2 =microtime();
$starttime = explode ( " " , $t1 );
$endtime = explode ( " " , $t2 );
$totaltime = $endtime [0]- $starttime [0]+ $endtime [1]- $starttime [1];
$timecost = sprintf( "%s" , $totaltime );
echo "页面运行时间: $timecost 秒" ;
?>
|
希望本文所述对大家的php程序设计有所帮助。