微信小游戏:超大数值计算

news2024/11/16 2:23:15

测试代码:

import {large_number} from "./large_number";

const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    @property(cc.Label)
    label: cc.Label = null;

    @property
    text: string = 'hello';

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        let large_number_es = new large_number();

        var b = [199999999];
        var res = large_number_es._ajust_bit_value(b);
        console.log("正确的显示,自动进位1999:");
        res = large_number_es.large_dis(res);
        console.log(res);

        var c = [1,0,0,0,0,0];
        var res = large_number_es._ajust_bit_value(c);
        console.log(res);
        console.log("正确的显示,消除前面的0000001");
        res = large_number_es.large_dis(res);
        console.log(res);

        var a = [1,1,5];
        var b = [0,999,5];
        console.log("加法1001+5999000:");
        res = large_number_es.large_add(a,b);
        console.log(res);

        var a = [1,1];
        var b = [0,999,5];
        console.log("减法错误:出现负数");
        res = large_number_es.large_minus(a,b);
        console.log(res);

        var a = [1,1,5,2,143,4];
        var b = [0,999,5,1,143,4];
        console.log("减法正确");
        res = large_number_es.large_minus(a,b);
        console.log(res);
        res = large_number_es.large_dis(res['cal']);
        console.log(res);

        var a = [1,1,9,2,3,4];
        var b = [1,1,9,2,3,4];
        console.log("减法相等");
        res = large_number_es.large_minus(a,b);
        console.log(res);
        res = large_number_es.large_dis(res['cal']);
        console.log(res);

        var a = [999,999];
        var bb = 9999;
        console.log("乘法");
        res = large_number_es.large_mul(a,bb);
        console.log(res);
        res = large_number_es.large_dis(res);
        console.log(res);
    }
}

 

计算的类:

export class large_number{
    public unit = ["","K","M","G","aa","ab","ac","ad"]; 
    //加法
    large_add(a,b){
        var temp = [];
        if(a.length<b.length)
        {
            while(a.length < b.length) {
                a.push(0);
            }
        }
        else
        {
            while(a.length > b.length) {
                b.push(0);
            }
        }
        for(var i = 0; i < a.length; i ++) {
            temp[i] = a[i] + b[i];   
        }
        var result = this._ajust_bit_value(temp);        
        return result;
    }

    /**
     * 减法:a-b 
     */
    large_minus(a,b){
        var temp = [];
        var result = {};
        if(a.length<b.length)
        {
            while(a.length < b.length) {
                a.push(0);
            }
        }
        else
        {
            while(a.length > b.length) {
                b.push(0);
            }
        }

        for(var i = 0; i < a.length; i ++) {
            temp[i] = a[i] - b[i];   
        }
        
        if(temp[temp.length -1] < 0)
        {
            //a小于b
            result['code'] = 400;
        }
        else
        {
            //把前面为0的都消除掉            
            var temp_cal = this._ajust_bit_value(temp);
            temp_cal = this._ajust_bit_value(temp_cal);
            result['code'] = 200;
            result['cal'] = temp_cal;
        }
        return result;
    }

   //乘法 a为大数据,b为乘数
    large_mul(a,b){
        var temp = [];       
        for(var i = 1; i < a.length; i ++) {
            console.log(a[i],b)
            temp[i-1] = Math.floor(((a[i] * 1000) + a[i-1])*b);
            
            temp[i] = 0;
            //temp[i] = Math.floor(temp[i]);
        }
        console.log(temp)
        var result = this._ajust_bit_value(temp);        
        return result;
    }

    //数值显示
    large_dis(a){
        var result:string = '0';
        if(a.length >= 2)
        {
            var result = String(a[a.length -1]) + '.' + String(this._format_num(a[a.length - 2])).substring(0,2) + this.unit[a.length -1];
        }
        else
        {
            var result = String(a[a.length -1]);
        }
        return result;
    }

    //转变成数值
    convert_number(array){
        let temp:number
        for(let i=1;i<array.length;i++)
        {

        }
    }
    
    //格式化:显示尾数数据
    _format_num(num) {
        if (num < 10) {
            return "00" + num;
        }
        else if(num < 100) {
            return "0" + num;
        }
        else {
            return "" + num;
        }
    }

    //格式化:运算后的数据
    _ajust_bit_value(bit_array){
        //加法
        for(var i = 0; i < bit_array.length; i ++) {
            while (bit_array[i] >= 1000) {
                bit_array[i] -= 1000;
                if (i + 1 >= bit_array.length) {
                    bit_array.push(0);                   
                }
                bit_array[i + 1] = bit_array[i + 1] + 1;
            }
        }
        //减法 
        if(bit_array.length >2)
        {            
            for(var j = bit_array.length -1; j > 0; j--)
            {
                if(bit_array[j] == 0)
                {                    
                    bit_array.splice(j,1);
                }
                else
                {
                    break;
                }
            }
        }

        for(var i = 0; i < bit_array.length; i ++) {
            while (bit_array[i] < 0) {
                bit_array[i] += 1000;
                bit_array[i+1] = bit_array[i+1] - 1;
            }
        }        
        
        return bit_array;
    }
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作符重载的概念

下面的复数解决方案是否可行&#xff1f; Add 函数可以解决 Complex 对象相加的问题&#xff0c;但是 Complex 是现实世界中确实存在的复数&#xff0c;并且复数在数学中的地位和普通的实数相同 为什么不能让 操作符也支持复数相加呢&#xff1f; 操作符重载 C 中的重载能够…

四、OkHttp_连接池

预备知识 通常我们进行HTTP连接网络的时候我们会进行TCP的三次握手&#xff0c;然后传输数据&#xff0c;然后再释放连接。 大量的连接每次连接关闭都要三次握手四次分手的很显然会造成性能低下&#xff0c; 因此http有一种叫做keep-alive connections的机制&#xff08;HTTP1…

【每日一题】Leetcode - 10. 正则表达式匹配

题目 Leetcode - 10. 正则表达式匹配 解题思路 预处理正则表达式&#xff0c;合并同项&#xff0c;比如: "a * b * c * . * " -> " . * "更加预处理后的正则表达式&#xff0c;构建NFA通过NFA状态转移条件一个一个匹配字符串字符不匹配的状态要回退匹…

【统一安全管控平台】4A解析

文章目录 一、统一帐号&#xff08;Account&#xff09;二、统一认证(Authentication)三、统一授权(Authorization)四、统一审计(Audit)参考&感谢 4A是指帐号&#xff08;Account&#xff09;、认证&#xff08;Authentication&#xff09;、授权&#xff08;Authorization…

mysql8.0新特性详解

一、my.ini或my.cnf的全局参数 一个连接最少占用内存是256K&#xff0c;最大是64M&#xff0c;如果一个连接的请求数据超过64MB&#xff08;比如排序&#xff09;&#xff0c;就会申请临时空间&#xff0c;放到硬盘上。 #最大连接数 max_connections3000 #最大用户连接数 max_…

智能饮品机器人的市场现状与前景未来,点赋科技与您共同期待

引言&#xff1a; 近年来&#xff0c;智能饮品机器人行业迅猛发展&#xff0c;成为引人瞩目的新兴市场。然而&#xff0c;这个行业的市场现状到底如何&#xff1f;它的前景又将如何发展&#xff1f;让点赋科技带大家一起来看看。 市场现状&#xff1a; 智能饮品机器人市场在过去…

解锁高效部署!快速搭建Kubernetes集群,提升团队生产力!

1 MacOS 1.1 下载 docker-desktop 从 docker 下载 docker-desktop (opens new window)&#xff0c;并完成安装 1.2 启用 k8s 集群 启动 docker-desktop&#xff0c;打开preference 面板 切换到 Kubernetes 标签页&#xff0c;并勾选启动 Enable Kubernetes&#xff0c;点击…

nginx 入门 (b站IT楠老师学习笔记)

文章目录 Nginx 入门 &#xff08;b站IT楠老师学习笔记&#xff09;一 基础了解1、下载nginx安装包2. nginx 可以提供的服务3. nginx 的优点4. 应用场景 二 实战2.1 基础检查以及配置文件结构了解2.2 main全局配置2.3 events模块2.4 http服务器配置2.5虚拟主机配置详解2.5.1 ht…

el-pagination分页查询封装

需求&#xff1a;因为需要用到表单查询的地方太多了&#xff0c;所以为了避免每个页面都写分页组件&#xff0c;直接封装好调用就完事了&#xff0c;简简单单 1.创建Pigination.vue公用组件 <template><div :class"{hidden:hidden}" class"paginatio…

AD中修改一个元器件的所有焊盘大小

1.首先&#xff0c;选中其中一个焊盘。 2.查找相似对象 3.修改component为same 4.修改X size和Y size为same 5.确定 6.修改Pad Stack中的x/y 注&#xff1a;component可以不用改为same&#xff0c;用any就是查找和这个焊盘大小类似的对象。

力扣1768.交替合并字符串(java模拟法)

题目描述&#xff1a; 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 问题分析&#xff1a; 我们可以直…

servlet 监听器

做法: 在web.xml中: 或

矩形中的正方形:探究力扣最大正方形问题的奥秘

本篇博客会讲解力扣“1725. 可以形成最大正方形的矩形数目”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a;对于每一个矩形&#xff0c;切分出来的最大正方形的边长是矩形的长和宽的较小值。我们需要维护最大的正方形边长&#xff0c;并统计数目。 我们可以写…

Verilog基础之十、计数器实现

目录 一、前言 二、工程设计 2.1 设计代码 2.2 综合结果 ​2.3 仿真结果 一、前言 计数器是较为基础的逻辑&#xff0c;很多其他逻辑可依靠计数器实现&#xff0c;如控制器&#xff0c;分频。原理为通过统计时钟脉冲的个数来输出计数值。 二、工程设计 2.1 设计代码 工…

实验 09 线性回归与波士顿房价预测

文章目录 实验 09 线性回归与波士顿房价预测一、实验目的二、实验设备三、实验内容3.1 了解数据3.2 分析数据3.3 建立模型&#xff08;一&#xff09;使用一个变量进行预测&#xff08;二&#xff09;使用多元线性回归分析进行预测 实验 09 线性回归与波士顿房价预测 一、实验…

Dubbo【Dubbo实战(整合Mybaits-plus配置、接口、集成Thymeleaf) 】(五)-全面详解(学习总结---从入门到深化)

目录 ​编辑 Dubbo实战_整合Mybaits-plus配置 Dubbo实战_创建添加用户接口 Dubbo实战_查询用户业务接口 Dubbo实战_更新用户业务接口 Dubbo实战_删除用户业务接口 Dubbo实战_集成Thymeleaf Dubbo实战_用户添加业务消费者实现 Dubbo实战_用户查询业务消费者实现 Dubbo实战_…

R带参数运行

rm(listls()) suppressPackageStartupMessages({library(getopt) })# getopt(),是getopt包的函数&#xff0c;需要先按照getopt包 # # getopt(spec NULL, opt commandArgs(TRUE),command get_Rscript_filename(), usage FALSE,debug FALSE) # # spec&#xff1a;一个4或…

linux suse12 安装mysql

1.下载mysql https://dev.mysql.com/downloads/mysql/ 2.选中mysql版本 对选中的版本进行下载 也可以在linux服务器上直接下载&#xff1a;wget -c https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 3.把下载好的文件放到/usr/local…

mac上的vscode设置用滚轮来调节编辑页面大小

mac上的vscode设置用滚轮来调节编辑页面大小 问题背景 今天在mac上安装了vscode&#xff0c;刚想编写代码&#xff0c;但是突然发现无法用ctrl鼠标的滚轮来进行控制 代码编辑区域字体的大小。 解决方法 经过查找资料&#xff0c;发现在设置的配置文件中&#xff0c;有一个配…

前后端分离模式开发的BS电子病历编辑器源码(Java)

电子病历系统&#xff0c;是医学专用系统。医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&#xff1a;首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等&#xff0c;其中既有结构化信息&#xff0c;也有非结构化的自由文本&#xff0c;还有图形…