余数大法写了个手机虚拟号

这些日子来……
一直在想个问题,
“如果你有一张面值20元钞票,
请别花掉,因为它可以值20元!”

此情此景「心」情舒畅,
有20元搞了6瓶3块钱啤酒,
剩两块再买支烤串,
无愧酒香透长安,
满城尽带黄金甲。
快哉~ 快哉~

待酒将饮尽时,
转间发现20元,
应该是7瓶3块钱啤酒。
迷迷糊糊,开始怀疑人生。

待醉一夜后…
开始算昨夜酒钱。

然后……
就一发不可收拾,
从中得知,20除3余2,
那么21除以3余0,
那么22除以3余1,
那么23除以3余2,
那么24除以3余0,
那么25除以3余1,
那么26除以3余2,
那么27除以3余0,
好了「恨不得把什么都分成3份」,

对哦!什么都分成3份。
那么(不那么了)
既然如此,什么都分成3份。
可以理解为了以3为一个周期,
则上述以3为周期得到的余数都是「0,1,2」,
所有余数也小于3,就是小于一个指定的周期。
那么(不那么了呀)
既然如此,在茫茫人海。
说错了!正如整数是处于无穷「正负没有边界」。
而可以通过某个整数除以某个周期,
得到的余数在指定某个周期的范围内。

此时,估计酒醒了,
能感到些许的谜笑。

要是能再举个例子「happy~ happy~」
答案是可以的!
比如,我们每个人都有自己的手机号码。随着互联网的普及,手机号码可能与很多应用程序有着绑定。有时蓝天白云,想出街shopping!那么可能需要call隔壁老王护送一下啦。但是,又为了防止老王得知本仙女的手机号码。就有必要对手机号码进行加密了「也称“手机虚拟号”」。那么,重点来了。11位数的号码,通过加密之后应该还是11位数。免得老王直接再要手机号码了。
这时,就回到了上面的话题。一般手机号码的单个数字都在(0到9),可见不能超过9了。那么(好像有点喜欢那么)。则我们可以以9为一个周期呀!即9为除数,得到的余数范围在0~9,保证每个数字经过加密之后还是个位数。符合号码的数字组成。

好了~
说这么多我得威一下:

function virtualNumberFun(prefix, number) {
        //10000以内随机数
        var randomNumber = Math.round(Math.random() * 10000),
        //先去除输入手机号码前三位,进行正则方式分割,后合并于数组
        number = ((String(number).slice(3)).replace(/(?=(\B\d{1})+$)/g, ',')).split(','),
        //指定一种类型的手机号码前三位(如177,188,199等)
        virtualNumber = String(prefix);
        /* 遍历number数组中的每一项
        每一项加上一个10000以内的随机数,后除以9取余
        再用除数(周期数)减去得到每一项的余数
        最终拼接每一项 */
        number.forEach(item = >{
                virtualNumber += parseInt(9 - (parseInt(Number(item) + randomNumber) % 9));
        });
        return virtualNumber;
}

效果图:
domeVNum.mp4.gif

注意:上述代码仅拿核心部分来突出余数方法,完成一个比较简单的虚拟号生成结果。而非完整代码。此外,本文到此结束。谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个简单的Verilog代码,用于计算一个数的余数: ``` module remainder ( input [15:0] dividend, input [3:0] divisor, output [3:0] remainder ); reg [15:0] temp; always @ (dividend or divisor) temp = dividend % divisor; assign remainder = temp[3:0]; endmodule ``` 在这个例子中,我们使用了一个 `always` 块来计算余数,当被除数或除数发生变化时,计算就会被触发。计算结果被存储在一个临时寄存器中,然后输出到 `remainder` 端口。 这个例子中使用了一个简单的 `%` 运算符来计算余数,但是在实际的设计中,可能需要使用更复杂的算法来处理除法运算。 ### 回答2: Verilog是一种硬件描述语言,用于设计数字电路和编硬件描述模型。所以,用Verilog一个求余数的代码可如下所示: module modulus (input [31:0] dividend, input [31:0] divisor, output [31:0] remainder); reg [31:0] quotient; always @ (dividend or divisor) begin quotient = dividend / divisor; remainder = dividend % divisor; end endmodule 在上面的代码中,定义了一个叫做modulus的模块,它有三个输入端口:dividend(被除数)、divisor(除数)和remainder(余数)。同时还有一个 reg 类型的变量 quotient(商)。一个 always 块用于在 dividend 或 divisor 发生变化时计算余数。 在 always 块中,首先计算除法的商,将结果存储在 quotient 变量中,然后计算除法的余数,并将结果存储在 remainder 变量中。最后,当 dividend 或 divisor 发生变化时,always 块会自动触发,重新计算余数。 这样,当在外部实例化这个模块时,将传入 dividend 和 divisor 的值,并通过输出端口 remainder 获取余数的结果。 ### 回答3: 在Verilog中编一个计算余数的代码可以通过使用模运算符"%"来实现。下面是一个示例代码: module mod_calc ( input [7:0] dividend, input [7:0] divisor, output [7:0] remainder ); always @* begin remainder = dividend % divisor; end endmodule 该代码定义了一个名为"mod_calc"的模块,该模块具有一个8位的被除数(dividend)输入、一个8位的除数(divisor)输入以及一个8位的余数(remainder)输出。通过使用"always"关键字和"@"符,在每次输入发生变化时,都会执行一个连续赋值语句来计算余数余数的计算通过在dividend和divisor之间使用模运算符"%"来实现,并将结果赋值给余数(remainder)输出。完成后,可以将该模块实例化并连接到其他模块或顶层设计中,以根据输入计算余数,并将结果传递给其他部分使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值