javascript 0000000序列递增算法

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

0000001
0000002
0000003
.....递增到10
0000010
.....递增到100
0000100
.....递增到100000
0100000

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

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);
}

第二种写法(推荐):

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

ES6写法:

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

第三种写法:

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();

第四种写法:

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

其他语言实现:
mysql实现

CREATE TABLE `test` (
  `tid` int(7) UNSIGNED ZEROFILL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

java实现:

 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);
    }

C语言实现:
在支持C99的编译器上运行.(C89不支持)

#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 复制到缓冲区.
}

C语言第二种:

for (int i = 0; i < 10000000; i++) {
    printf("%07d\n", i);
}

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

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

php版本:
1,

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

2,

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

3,

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

Python版本:
Python 3,

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

来源于SF问答社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值