weixin_41244451 2024-08-04 14:30 采纳率: 93.9%
浏览 0
已结题

上面的是9位数的每一位上的数字计算的一些判断,怎么简化一下?请写详细一点


let result = 0;
    const operators = ['+', '-'];
    let question = '';
    let lastOperator = '+'; // 初始操作符为加号
    let lastNumber = null; // 初始化上一个数字为null
    let buttonsDisabled = true; // 按钮初始状态为不可点击
for (let i = 0; i < bishu; i++) {//几笔
                let number, operator;
                let validNumber = false;
                let result_onesDigit    = onesDigit(result);   //上一个数的个位
                let result_tensDigit    = tensDigit(result);   //上一个数的十位
                let result_hundredDigit = hundredDigit(result);//上一个数的百位
                ......省略
                let result_yiDigit      = yiDigit(result);     //上一个数的亿位
 
                // 循环直到找到一个合适的数字
                do {
number = Math.floor(Math.random() * 999999999) + 1; // 随机生成百位数
                        let number_onesDigit=onesDigit(number);//个位
                        let number_tensDigit=tensDigit(number);//十位
                        let number_hundredDigit=hundredDigit(number);//百位
                        ......省略
                        let number_yiDigit=yiDigit(number);//亿位
                        operator = operators[Math.floor(Math.random() * 2)];
if (operator === '+')
                        {
                            //百位
                            if((result_hundredDigit>4 && result_hundredDigit<9) || result_hundredDigit===0)
                            {
                                validNumber = result_hundredDigit + number_hundredDigit <= 9;
                            }
                            else if(result_hundredDigit===9)
                            {
                                validNumber = false;
                            }
                            else
                            {
                                validNumber = result_hundredDigit + number_hundredDigit <= 4;
                            }
                        }else{
                            //百位
                            if(result_hundredDigit===5)
                            {
                                validNumber = result_hundredDigit - number_hundredDigit == 0;
                            }
                            else if(result_hundredDigit===6)
                            {
                                validNumber = result_hundredDigit - number_hundredDigit == 0 || result_hundredDigit - number_hundredDigit == 1 || result_hundredDigit - number_hundredDigit == 5;
                            }
                            else if(result_hundredDigit===7)
                            {
                                validNumber = (result_hundredDigit - number_hundredDigit >= 0 && result_hundredDigit - number_hundredDigit <= 2) || result_hundredDigit - number_hundredDigit == 5 || result_hundredDigit - number_hundredDigit == 6;
                            }
                            else if(result_hundredDigit===8)
                            {
                                validNumber = (result_hundredDigit - number_hundredDigit >= 0 && result_hundredDigit - number_hundredDigit <= 3) || (result_hundredDigit - number_hundredDigit >= 5 && result_hundredDigit - number_hundredDigit <= 7);
                            }
                            else if(result_hundredDigit===9)
                            {
                                validNumber = result_hundredDigit - number_hundredDigit >= 0 && result_hundredDigit - number_hundredDigit <= 8;
                            }
                            else
                            {
                                validNumber = result_hundredDigit - number_hundredDigit >= 0;
                            }
                        }
 
                        if(validNumber)
                        {
                            if (operator === '+')
                            {
                                //十位
                                if((result_tensDigit>4 && result_tensDigit<9) || result_tensDigit===0)
                                {
                                    validNumber = result_tensDigit + number_tensDigit <= 9;
                                }
                                else if(result_tensDigit===9)
                                {
                                    validNumber = false;
                                }
                                else
                                {
                                    validNumber = result_tensDigit + number_tensDigit <= 4;
                                }
                            }else{
                                //十位
                                if(result_tensDigit===5)
                                {
                                    validNumber = result_tensDigit - number_tensDigit == 0;
                                }
                                else if(result_tensDigit===6)
                                {
                                    validNumber = result_tensDigit - number_tensDigit == 0 || result_tensDigit - number_tensDigit == 1 || result_tensDigit - number_tensDigit == 5;
                                }
                                else if(result_tensDigit===7)
                                {
                                    validNumber = (result_tensDigit - number_tensDigit >= 0 && result_tensDigit - number_tensDigit <= 2) || result_tensDigit - number_tensDigit == 5 || result_tensDigit - number_tensDigit == 6;
                                }
                                else if(result_tensDigit===8)
                                {
                                    validNumber = (result_tensDigit - number_tensDigit >= 0 && result_tensDigit - number_tensDigit <= 3) || (result_tensDigit - number_tensDigit >= 5 && result_tensDigit - number_tensDigit <= 7);
                                }
                                else if(result_tensDigit===9)
                                {
                                    validNumber = result_tensDigit - number_tensDigit >= 0 && result_tensDigit - number_tensDigit <= 8;
                                }
                                else
                                {
                                    validNumber = result_tensDigit - number_tensDigit >= 0;
                                }
                            }
                        }
 
                        if(validNumber)
                        {
                            if (operator === '+')
                            {
                                //个位
                                if((result_onesDigit>4 && result_onesDigit<9) || result_onesDigit===0)
                                {
                                    validNumber = result_onesDigit + number_onesDigit <= 9;
                                }
                                else if(result_onesDigit===9)
                                {
                                    validNumber = false;
                                }
                                else
                                {
                                    validNumber = result_onesDigit + number_onesDigit <= 4;
                                }
                            }
                            else
                            {
                                //个位
                                if(result_onesDigit===5)
                                {
                                    validNumber = result_onesDigit - number_onesDigit == 0;
                                }
                                else if(result_onesDigit===6)
                                {
                                    validNumber = result_onesDigit - number_onesDigit == 0 || result_onesDigit - number_onesDigit == 1 || result_onesDigit - number_onesDigit == 5;
                                }
                                else if(result_onesDigit===7)
                                {
                                    validNumber = (result_onesDigit - number_onesDigit >= 0 && result_onesDigit - number_onesDigit <= 2) || result_onesDigit - number_onesDigit == 5 || result_onesDigit - number_onesDigit == 6;
                                }
                                else if(result_onesDigit===8)
                                {
                                    validNumber = (result_onesDigit - number_onesDigit >= 0 && result_onesDigit - number_onesDigit <= 3) || (result_onesDigit - number_onesDigit >= 5 && result_onesDigit - number_onesDigit <= 7);
                                }
                                else if(result_onesDigit===9)
                                {
                                    validNumber = result_onesDigit - number_onesDigit >= 0 && result_onesDigit - number_onesDigit <= 8;
                                }
                                else
                                {
                                    validNumber = result_onesDigit - number_onesDigit >= 0;
                                }
                            }
                        }
              ......省略
            if(validNumber)
                        {
                            if (operator === '+')
                            {
                                //亿位
                                if((result_yiDigit>4 && result_yiDigit<9) || result_yiDigit===0)
                                {
                                    validNumber = result_yiDigit + number_yiDigit <= 9;
                                }
                                else if(result_yiDigit===9)
                                {
                                    validNumber = false;
                                }
                                else
                                {
                                    validNumber = result_yiDigit + number_yiDigit <= 4;
                                }
                            }
                            else
                            {
                                //亿位
                                if(result_yiDigit===5)
                                {
                                    validNumber = result_yiDigit - number_yiDigit == 0;
                                }
                                else if(result_yiDigit===6)
                                {
                                    validNumber = result_yiDigit - number_yiDigit == 0 || result_yiDigit - number_yiDigit == 1 || result_yiDigit - number_yiDigit == 5;
                                }
                                else if(result_yiDigit===7)
                                {
                                    validNumber = (result_yiDigit - number_yiDigit >= 0 && result_yiDigit - number_yiDigit <= 2) || result_yiDigit - number_yiDigit == 5 || result_yiDigit - number_yiDigit == 6;
                                }
                                else if(result_yiDigit===8)
                                {
                                    validNumber = (result_yiDigit - number_yiDigit >= 0 && result_yiDigit - number_yiDigit <= 3) || (result_yiDigit - number_yiDigit >= 5 && result_yiDigit - number_yiDigit <= 7);
                                }
                                else if(result_yiDigit===9)
                                {
                                    validNumber = result_yiDigit - number_yiDigit >= 0 && result_yiDigit - number_yiDigit <= 8;
                                }
                                else
                                {
                                    validNumber = result_yiDigit - number_yiDigit >= 0;
                                }
                            }
                        }

上面的是9位数的每一位上的数字计算的一些判断,怎么简化一下?麻烦写详细一点

  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-08-04 14:30
    关注

    引自免费微信小程序:皆我百晓生

    首先,我们需要简化这个代码并使其更具可读性。我们可以创建一个函数来检查两个数字之间的操作是否有效,而不是重复相同的代码块。此外,我们可以使用数组来存储每一位数字,这样我们就可以避免重复的数字提取代码。以下是简化后的代码:

    function isValidOperation(currentDigit, nextDigit, operator) {
        if (operator === '+') {
            return (currentDigit + nextDigit) <= 9;
        } else {
            // 对于减法操作,我们需要考虑借位的情况
            if (currentDigit < nextDigit) {
                return false; // 不能从比当前数字小的数字中减去
            } else if (currentDigit === nextDigit) {
                return currentDigit !== 0; // 不能从0减去相同的数字
            } else {
                return true; // 其他情况都是合法的
            }
        }
    }
    
    let result = 0;
    const operators = ['+', '-'];
    let question = '';
    let lastOperator = '+'; // 初始操作符为加号
    let digits = []; // 存储每一位的数字
    let buttonsDisabled = true; // 按钮初始状态为不可点击
    
    for (let i = 0; i < bishu; i++) { // 假设bishu是输入的数字位数(假设已知)
        // 随机生成数字和操作符
        let number = Math.floor(Math.random() * 1000000000) + 1; // 生成一个随机数(假设为九位数)并存储到digits数组中
        digits.push(...numberToString(number).split('')); // 将数字转换为字符串并拆分为单个数字存储到数组中
        let operator = operators[Math.floor(Math.random() * 2)]; // 随机选择操作符
        let validNumber = true; // 初始化验证结果
    
        // 检查每一位数字和操作是否合法
        for (let j = 0; j < digits.length; j++) {
            if (!isValidOperation(digits[j], digits[(j + 1) % digits.length], operator)) { // 使用模运算处理数组的循环索引
                validNumber = false; // 如果不合法,设置验证结果为false并跳出循环
                break;
            }
        }
    
        if (validNumber) { // 如果验证结果合法,执行相应的操作并更新结果和操作符等状态信息... }
    }
    

    这个简化版本的代码通过使用函数和数组来减少重复代码并提高可读性。它首先定义了一个函数来检查操作是否合法,然后在循环中使用这个函数来验证每一位数字和操作是否合法。通过使用模运算来处理数组的循环索引,我们避免了在循环内部进行额外的判断和处理。注意,此代码假设了一些已知条件(如数字的位数和操作符的随机生成方式),并且省略了一些具体的操作逻辑(如更新结果和状态信息等)。你需要根据你的实际需求进行相应的调整和完善。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月4日
  • 已采纳回答 8月4日
  • 创建了问题 8月4日

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小