Home > Backend Development > PHP Tutorial > javascript - Looking for an algorithm? 0000000 sequence increment

javascript - Looking for an algorithm? 0000000 sequence increment

WBOY
Release: 2016-08-04 09:21:25
Original
1163 people have browsed it

举个栗子:0000000递增,格式是这样的:

<code>0000001
0000002
0000003
.....递增到10
0000010
.....递增到100
0000100
.....递增到100000
0100000
</code>
Copy after login
Copy after login

模仿着@G_Koala_C的回答,写了php版的:

<code>for ($i = 0; $i < 100; $i++) { 
    $zero = '';
    $k = 7-strlen($i);
    for ($j = $k; $j >0; $j--) { 
        $zero .= 0;
    }
    echo $zero.$i.'<br>';
}</code>
Copy after login
Copy after login

javascript - Looking for an algorithm? 0000000 sequence increment

回复内容:

举个栗子:0000000递增,格式是这样的:

<code>0000001
0000002
0000003
.....递增到10
0000010
.....递增到100
0000100
.....递增到100000
0100000
</code>
Copy after login
Copy after login

模仿着@G_Koala_C的回答,写了php版的:

<code>for ($i = 0; $i < 100; $i++) { 
    $zero = '';
    $k = 7-strlen($i);
    for ($j = $k; $j >0; $j--) { 
        $zero .= 0;
    }
    echo $zero.$i.'<br>';
}</code>
Copy after login
Copy after login

javascript - Looking for an algorithm? 0000000 sequence increment

js写法, 原理就是先算数字的长度,然后在前边补零。现在是到100,你可以把i改到100000

<code>for (var i = 0 ; i <= 100; i ++){
  var zero = "";
  for (var j = 7-i.toString().length; j > 0; j--) {
    zero += "0";
  }
  console.log(zero + i);
}</code>
Copy after login

其实是补零的问题额,Python 3写这样:

<code>["{:0>7}".format(i) for i in range(1, 100001)]</code>
Copy after login

再提供一个js的写法

<code>Array.from(Array(1000000).keys()).map(function(x){ return "0".repeat(8 - ("" + (x + 1)).length) + (x+1)})</code>
Copy after login

PHP

<code>for ($i=0;$i<=9999999;$i++) echo str_pad($i,7,"0",STR_PAD_LEFT);</code>
Copy after login

提供一个未来可能能使用的方法。。

<code>for (let i = 0; i <= 100; i++) console.log(String(i).padStart(7,'0'))</code>
Copy after login

<code>function incrace(){
    console.log((n=>(7-n.length)>0?(new Array(7-n.length+1)).join(0)+n:n)(String(i++)));
    setTimeout(incrace,500);
}
var i = 0;
incrace();
</code>
Copy after login

写完才发现问题已经解答了…js代码,供参考

JS

<code>var len = 10;    //长度
for (var i = 1; i <= 100; i++) {
    console.log((Array(len).join(0) + Math.abs(i)).slice(-len));
}</code>
Copy after login

来来来...上一套PHP版野路子

<code>// 定义一个位数比结果位数多的初始值
$base_num = 10000000;
// 开搞
for ($i = 0; $i < 100; $i++) {
    echo substr($base_num += $i, -7), "\n";
}</code>
Copy after login

看我C语言的:

<code>for (int i = 0; i < 10000000; i++) {
    printf("%07d\n", i);
}</code>
Copy after login

补零后的长度其实也是可配的:

<code>// 补零后长度, 注意printf的变化~
in len = 7;
for (int i = 0; i < 10000000; i++) {
    printf("%0*d\n", len, i);
}</code>
Copy after login

我发现很多回答都不是真正意义上的算法,我还以为类似C语言printf函数的实现呢.

上一个模拟printf函数的C语言实现吧,这个问题不用计算长度

请在支持C99的编译器上运行.(C89不支持)

<code>#include <string.h>
#include <stdlib.h>

void ltoa(long num, int width, char *str)
{
    static char digs[] = "0123456789";//为了方便扩展十六进制
    char ac[width+1];// C99支持; +1 是因为字符串必须以'\0'结尾,但这个不计入字符串长度.
    int i = width; // 这个变量可以直接用i代替的,但是这个函数是我之前写的,懒得改下面代码
    memset(&ac, '0', width); //直接把全部内存先置'0'
    ac[i] = '\0';//字符串结尾必须是'\0'
    
    //后面是整数转字符串的代码,思路就是除法和余数得到每一位数字(进制转换也是同样思想)
    //例如123 /10 = 12_3
    //   12 / 10 = 1_2
    //    1 / 10 = 0_1 
    //你可以看到,余数 3,2,1 倒置过来就是1,2,3.
    //把 3, 2 ,1 倒置复制到 内存空间就行了.
    if(num)
        ac[--i] = digs[num % 10];

    num = num / 10;
    while( 0 < num && 0 < i)
    {
        ldiv_t qr = ldiv(num, 10);
        // ldiv_t 用结构体,主要方便一次性取出余数和商
        num =  qr.quot;
        ac[--i] =  digs[qr.rem]; // 把0,1,3,4转换成'0','1','2','3',也可用0+'0' 的方法,但是上面已经说明,为了扩展到其他进制方便.
        
    }

    int n = sizeof(ac) - i;
    memcpy(str, &ac, width +1);//把字符串和\0 复制到缓冲区.
}
</code>
Copy after login

<code>    int max = 一个数字;
    for (int i = 0; i < max; i++) {
        String tem = "";
        for (int j = 0; j < len - (i + "").toString().length(); j++) {
            tem = tem + "0";
        }
        System.out.println(tem+i);
    }</code>
Copy after login

有人把值改成100000以上么

为啥没有C/C++版本啊。
看你们写的这么复杂我就放心了

这还要写什么算法吗?来个mysql版本的:

<code>CREATE TABLE `test` (
  `tid` int(7) UNSIGNED ZEROFILL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template