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

上面的是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:10
    关注

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

    你的代码主要是对每一位数字进行验证,以确保在加法或减法操作中不会超出一定的范围。为了简化这段代码,我们可以考虑将每一位数字的验证逻辑整合到一个函数中,避免重复的代码块。此外,我们可以使用数组来存储每一位数字,而不是单独定义变量。以下是简化后的代码示例:

    function isValidNumber(resultDigit, operator, maxLimit) {
      if (operator === '+') {
        return resultDigit + maxLimit <= 9; // 加法验证逻辑
      } else {
        // 根据resultDigit的值,返回不同的验证逻辑
        switch (resultDigit) {
          case 5: return maxLimit === 0 || maxLimit === 1 || maxLimit === 5; // 对于结果为5的特殊处理
          case 6: return maxLimit >= 0 && maxLimit <= 3 || maxLimit === 5 || maxLimit === 6; // 对于结果为6的特殊处理
          case 7: return (maxLimit >= 0 && maxLimit <= 2 || maxLimit >= 5 && maxLimit <= 7) || maxLimit === 6; // 对于结果为7的特殊处理
          case 8: return (maxLimit >= 0 && maxLimit <= 3 || maxLimit >= 5 && maxLimit <= 8); // 对于结果为8的特殊处理
          default: return maxLimit >= 0; // 其他情况的处理
        }
      }
    }
    
    let result = 0; // 结果初始值
    const operators = ['+', '-']; // 操作符数组
    const numberArray = []; // 存储数字的每一位数值数组
    const numberMaxDigits = ['nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'two', 'one']; // 定义每个位置的最大值字符串(方便定位)
    let lastOperator = '+'; // 上一个操作符为加号初始化
    let lastNumberValid = false; // 上一个数字是否有效的标记初始化
    let buttonsDisabled = true; // 按钮初始状态为不可点击状态初始化
    const bishu = ...; // 根据实际情况填写数值(几笔的数量)省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分代码...省略部分数字位数数量(例如:如果数字是两位数,则此处为2)这里的变量具体名称可以根据你的程序命名规范调整;其它省略部分的代码也要根据你的具体业务逻辑填写完整的值(确保没有漏掉某些必要逻辑)。假设我们已经得到了数字number和操作符operator的值。然后循环遍历每个数字的每一位:for (let i = numberMaxDigits.length - 1; i >= 0; i--) {当前数字的每一位索引索引由高到低进行循环,以便正确进行加法或减法操作。计算当前位的值,并根据前面的计算结果判断是否为有效数字:const currentDigit = Math.floor(number / Math.pow(10, i)) % 10;const validResult = isValidNumber(lastNumberValid ? result % 10 : currentDigit, lastOperator, numberArray[i]);如果当前位是有效数字,则更新结果和操作符:if (validResult) {result += numberArray[i] * Math.pow(10, numberMaxDigits.length - i - 1);lastOperator = operator;} 最后将计算得到的所有位拼接成一个数字进行展示或者后续使用即可。这里的计算过程中并未展示详细流程和数据存储等细节,具体实现需要根据实际需求进行调整和优化。通过这种方式,我们可以简化代码并减少重复逻辑。同时,根据实际需求,还可以进一步优化算法和逻辑以提高效率。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 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进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享