Heim > Backend-Entwicklung > PHP-Tutorial > javascript - Auf der Suche nach einem Algorithmus? 0000000 Sequenzinkrement

javascript - Auf der Suche nach einem Algorithmus? 0000000 Sequenzinkrement

WBOY
Freigeben: 2016-08-04 09:21:25
Original
1154 Leute haben es durchsucht

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

<code>0000001
0000002
0000003
.....递增到10
0000010
.....递增到100
0000100
.....递增到100000
0100000
</code>
Nach dem Login kopieren
Nach dem Login kopieren

模仿着@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>
Nach dem Login kopieren
Nach dem Login kopieren

javascript - Auf der Suche nach einem Algorithmus? 0000000 Sequenzinkrement

回复内容:

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

<code>0000001
0000002
0000003
.....递增到10
0000010
.....递增到100
0000100
.....递增到100000
0100000
</code>
Nach dem Login kopieren
Nach dem Login kopieren

模仿着@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>
Nach dem Login kopieren
Nach dem Login kopieren

javascript - Auf der Suche nach einem Algorithmus? 0000000 Sequenzinkrement

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>
Nach dem Login kopieren

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

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

再提供一个js的写法

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

PHP

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

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

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

<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>
Nach dem Login kopieren

写完才发现问题已经解答了…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>
Nach dem Login kopieren

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

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

看我C语言的:

<code>for (int i = 0; i < 10000000; i++) {
    printf("%07d\n", i);
}</code>
Nach dem Login kopieren

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

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

我发现很多回答都不是真正意义上的算法,我还以为类似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>
Nach dem Login kopieren

<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>
Nach dem Login kopieren

有人把值改成100000以上么

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

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

<code>CREATE TABLE `test` (
  `tid` int(7) UNSIGNED ZEROFILL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage