php写起来不太好,算法还是用C或C++写起来方便些:
#include <stdio.h>
#include <stdlib.h>
void out_put(int start,int end,int cur){
int i = start;
for(;i<=end;i++){
if(i==cur) printf("* ");
else printf("%d ",i);
}
}
void navi(int cur,int page){
int show=9, hf=show/2;
if(cur!=1) printf("Prev ");
if(page<=show){
out_put(1,page,cur);
} else {
if(cur-1<hf+2){
out_put(1,cur,cur);
} else {
printf("1 ");
if(page!=show+1) printf("... ");
out_put(cur-hf+(page-cur-hf>0?0:page-cur-hf),cur,cur);
}
if(page-cur<hf+2){
out_put(cur+1,page,cur);
} else {
out_put(cur+1,cur+hf-(cur-hf>1?0:cur-hf-1),cur);
if(page!=show+1) printf("... ");
printf("%d ",page);
}
}
if(cur!=page) printf("Next");
}
int main(int argc,char** argv){
if(argc!=3){
printf("Parameters error!\n");
return -1;
}
navi( atoi(argv[1]), atoi(argv[2]) );
printf("\n");
return 0;
}
编译运行看一下:

gpp命令实际上就是gcc命令,会编译出来一个a.exe,用a就可以运行,接受两个参数,第一个是当前页,第二个是总页数。
还有些地方需要改进,欢迎大家提意见。

浙公网安备 33010602011771号