最近网页与微信中出现了一个比较火的趣味工具,输入一段生日数字可以获得该串数字在圆周率中第几位。下面简单分析下这个功能的实现方法。
公众平台实现需要先与公众平台对接,首先是在开发者平台获取开发密匙以及设置与自己程序的后台对接,接收客户发送的消息,在位数比较多的圆周率数据中通过程序中的方法来查找接收数字字符第一次出现的位置,由于一般程序查询字符第一次出现位置是0起步,所以将上述查询的结果加1,即生日在圆周率中的位数,网页实现方法同理,只不过更为简单些,无需对接,只需要接收网页提交的参数即可.
关于字符查询的过程这里以php为例:
生日数字为1971年6月9日
圆周率数据为:3.141592653589793238462643383279502884197169399等等
我们可以直接将数据赋值给变量,也可以将这些数据存放在名为xxx.txt的文本或json文件中.以便于读取使用.
示例:
<?php
$shengri="197169";
$pidata=file_get_contents( "xxx.txt" );
$weishu=strpos($pidata,$shengri) +1;
echo "你的生日".$shengri."在圆周率第".$weishu."位";
?>
首先定义一个php变量$shengri,将生日赋值给这个变量,然后通过file_get_contents读取存放在xxx.txt中的圆周率数据,用strpos方法查询出数据中出现数字197169第一次的位置,由于得到的位数是从0开始的,再对其加1,即生日数字在圆周率的位置,最后输出查询出的答案即可。
要想实现根据数字查询在圆周率Π中的位数,最主要还是需要超多位数的圆周率的数据,以及查找字符在另一堆字符中第一次出现的方法
如js代码
var cxsj="数据";
var weishu=cxsj.indexOf("数字");
java代码
String cxsj = "数据";
int fhjg = cxsj.indexOf(数字);
都是使用的程序自带的.indexOf()方法来实现查找第一次出现的位置,得数字197169在圆周率中处于第39位.
当然,本站中生活查询栏目的圆周率查询工具也可以查看生日数字在圆周率中的位数.
其实呢,我们还可以对以上的代码做一个扩展,如果接收到的数字中含有其它字符如1971年6月9日,那怎么办?
可以在第一行代码下方增加如下代码:
$shengri=preg_replace('/[^0-9]/','',$$shengri);
可以使用正则[^0-9]匹配的方式对接收到的生日文字进行过滤,去除掉除数字以外的所有字符,这样一个简单查询的功能就可以更加的完善了.