鸡兔同笼JavaScript求解,先验证整数边界再套公式
鸡兔同笼的求解公式只有两行但给页面写计算函数时直接算完还不够。输入可能是字符串、奇数腿数或一个超出 JavaScript 安全整数范围的值。把这些数据一路计算可能产生负数、半只兔或失真的整数。在每只鸡两腿、每只兔四腿、每只动物一个头的模型下设总头数为H、总腿数为L。兔数为L − 2H÷ 2鸡数为H减兔数。要求两种数量都是非负整数因此H、L必须是非负整数L是偶数并满足2H ≤ L ≤ 4H。鼓捣星球的鸡兔同笼提供滑杆对照和抬腿法讲解还有十题一局的练习。下面另写一个求解教学示例解释数据边界不是该产品的完整源码。functionsolveChickenRabbit(heads,legs){if(!Number.isSafeInteger(heads)||heads0||!Number.isSafeInteger(legs)||legs0){return{ok:false,reason:需要非负安全整数};}constHBigInt(heads);constLBigInt(legs);if(L%2n!0n){return{ok:false,reason:腿数必须为偶数};}if(L2n*H||L4n*H){return{ok:false,reason:腿数不在可行范围内};}constrabbits(L-2n*H)/2n;constchickensH-rabbits;return{ok:true,chickens:Number(chickens),rabbits:Number(rabbits)};}console.log(solveChickenRabbit(10,28));// { ok: true, chickens: 6, rabbits: 4 }console.log(solveChickenRabbit(10,21));// 奇数腿拒绝console.log(solveChickenRabbit(10,18));// 腿太少拒绝console.log(solveChickenRabbit(10,42));// 腿太多拒绝console.log(solveChickenRabbit(10,28));// 字符串拒绝console.log(solveChickenRabbit(0,0));// 两种动物都是 0console.log(solveChickenRabbit(Number.MAX_SAFE_INTEGER1,0));// 超出 Number 安全整数范围拒绝函数没有用隐式转换接收数字字符串。网页输入框通常提供字符串调用层应按自己的格式规则解析并反馈错误再把合格的数字交给函数。不要先用宽松转换把空字符串等输入悄悄变成零。验证通过后转为BigInt是为了让2H、4H和减法保持整数精确。即使H本身是安全整数乘以4也可能超出Number安全范围。这里的返回值仍可转为Number因为合法鸡兔数量都不大于已验证的H。类型规则可查MDN BigInt和安全整数说明。边界不能只验负数。10个头、21条腿虽然都大于零仍无法形成整数解18条腿少于全是鸡的20条42条则超过全是兔的40条。0个头、0条腿在允许两种数量为零的模型里有解是否让练习题采用它是出题层的选择。合法结果也可以做独立复核。教学例子的6只鸡、4只兔满足6 4 10同时6 × 2 4 × 4 28。头数和腿数都检查避免只盯着一个公式。写这类小工具时把数学模型、输入格式和计算范围分开说明错误提示才有明确来处。本文由鼓捣星球整理AI辅助编辑。#JavaScript #整数计算 #前端开发 #鸡兔同笼