> 백엔드 개발 > PHP 튜토리얼 > javascript - 알고리즘을 찾고 계십니까? 0000000 시퀀스 증분

javascript - 알고리즘을 찾고 계십니까? 0000000 시퀀스 증분

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-08-04 09:21:25
원래의
1227명이 탐색했습니다.

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

1

2

3

4

5

6

7

8

9

10

<code>0000001

0000002

0000003

.....递增到10

0000010

.....递增到100

0000100

.....递增到100000

0100000

</code>

로그인 후 복사
로그인 후 복사

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

1

2

3

4

5

6

7

8

<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>

로그인 후 복사
로그인 후 복사

javascript - 알고리즘을 찾고 계십니까? 0000000 시퀀스 증분

回复内容:

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

1

2

3

4

5

6

7

8

9

10

<code>0000001

0000002

0000003

.....递增到10

0000010

.....递增到100

0000100

.....递增到100000

0100000

</code>

로그인 후 복사
로그인 후 복사

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

1

2

3

4

5

6

7

8

<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>

로그인 후 복사
로그인 후 복사

javascript - 알고리즘을 찾고 계십니까? 0000000 시퀀스 증분

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

1

2

3

4

5

6

7

<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>

로그인 후 복사

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

1

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

로그인 후 복사

再提供一个js的写法

1

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

로그인 후 복사

PHP

1

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

로그인 후 복사

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

1

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

로그인 후 복사

1

2

3

4

5

6

7

<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>

로그인 후 복사

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

JS

1

2

3

4

<code>var len = 10;    //长度

for (var i = 1; i <= 100; i++) {

    console.log((Array(len).join(0) + Math.abs(i)).slice(-len));

}</code>

로그인 후 복사

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

1

2

3

4

5

6

<code>// 定义一个位数比结果位数多的初始值

$base_num = 10000000;

// 开搞

for ($i = 0; $i < 100; $i++) {

    echo substr($base_num += $i, -7), "\n";

}</code>

로그인 후 복사

看我C语言的:

1

2

3

<code>for (int i = 0; i < 10000000; i++) {

    printf("%07d\n", i);

}</code>

로그인 후 복사

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

1

2

3

4

5

<code>// 补零后长度, 注意printf的变化~

in len = 7;

for (int i = 0; i < 10000000; i++) {

    printf("%0*d\n", len, i);

}</code>

로그인 후 복사

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

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

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

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

<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>

로그인 후 복사

1

2

3

4

5

6

7

8

<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>

로그인 후 복사

有人把值改成100000以上么

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

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

1

2

3

<code>CREATE TABLE `test` (

  `tid` int(7) UNSIGNED ZEROFILL DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>

로그인 후 복사
관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿