JS一个三位数个位百位上的数字的和等于十位上的数字百位上的数字的7倍比个位十位的数字的和大2个十百位上的和数字是14求这个三位数是多少
这个你可以这么写
for (var a = 1; a <= 9; a++) {
for (var b = 0; b <= 9; b++) {
for (var c = 0; c <= 9; c++) {
if (a + b === 7 * c + 2 && a + b + c === 14 && 10 * a + b + 10 * c + b === 10 * c + b + 2) {
console.log(100 * a + 10 * b + c)
}
}
}
}
(1).会将十进制的数字转换成二进制的,但是由于浮点数用二进制表示是无穷的
//如:
0.1——>0.0001 1001 1001 1001 ...(1001循环)
0.2——>0.0011 0011 0011 0011 ...(0011循环)
(2).IEEE754标准的64位双精度浮点数的小数部分最多支持53位二进制,多余的二进制数字被截断,所以两者相加之后的二进制之和是
0.0100110011001100110011001100110011001100110011001101
(3).将截断之后的二进制数字再转换为十进制,0.30000000000000004,所以在计算时产生了误差
我可以给出解决方案: 1. 遍历100-999之间的所有三位数,对于每个三位数都按要求进行验证。 2. 验证规则如下: 1. 个位和百位数字之和等于十位数字,即取出个位、十位、百位数字分别相加,判断是否相等。 2. 百位数字是个位数字的7倍,即取出个位和百位数字,计算百位数字是否是个位数字的7倍。 3. 个位和十位数字之和比百位和十位数字之和大2,即取出个位、十位、百位数字分别相加,判断个位和十位数字之和是否比百位和十位数字之和大2。 4. 十位百位数字之和为14,即取出十位和百位数字相加,判断是否等于14。 3. 对于符合所有要求的三位数,输出该数字即可。
参考代码如下:
for (var i = 100; i < 1000; i++) { var a = parseInt(i / 100); // 百位数字 var b = parseInt(i / 10) % 10; // 十位数字 var c = i % 10; // 个位数字 if (a + c === b && a === 7 * c && b + c - a === 2 && a + b === 14) { console.log(i); break; } }
输出结果为392。