大数相加和大数相乘

2023-11-01

1、大数相加

int或者long类型的数据往往满足不了数据容量的要求,这时需要用到数组或者字符串进行操作。考虑到数据的位数并不是一个确定的值,运用string来处理可以简化思维。在进行运算之前,需要明确下面几点要求:

1.将两组数据中位数大的放在前面,方便后面处理;

2.字符转数字,减去‘0’;数字转字符加上‘0’;

3.进位考虑

4.最高位时进位判断

string BigPlus(string num1,string num2){
    //默认使得num1位数大于num2,方便后续运算。
    if(num1.size()<num2.size()){
        string temp=num2;
        num2=num1;
        num1=temp;
    }
    int lenth1=num1.size(),lenth2=num2.size(),flag=0,a,b,sum;//初始化位数、进位标志、定义转换数字a、b和sum
    while(lenth1>0){//lenth1总是大于等于lenth2
        a=num1[lenth1-1]-'0';//转换为数字
        if(lenth2>0){
            b=num2[lenth2-1]-'0';//转换为数字
        }
        else{
            b=0;//num2位数加完了
        }
        sum=a+b+flag;//当前位加进位
        if(sum>=10){//进位判断
            flag=1;//进位标记
            num1[lenth1-1]='0'+sum%10;//取个位
        }
        else{
            flag=0;//进位标记清除
            num1[lenth1-1]='0'+sum;
        }
        //每次向前进位
        lenth1--;
        lenth2--;
    }
    if(flag){
        num1="1"+num1;//当最高位进位,在前面加1
    }
    return num1;//返回得到的和
}

2、大数相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1: 输入: num1 = “2”, num2 = “3”. 输出: “6”

class Solution {
public:
	string multiply(string num1, string num2) {
		if (num1 == "0" || num2 == "0") return "0";
		int n1 = num1.length() - 1;
		int n2 = num2.length() - 1;
		vector<int> mul(n1 + n2 + 2);
//编译器默认初始化为0  n位数和m位数相乘最多为m+n位数。
//乘数 num1 位数为 MM,被乘数 num2 位数为 NN, num1 x num2 结果 res 最大总位数为 M+N
//num1[i] x num2[j] 的结果为 tmp(位数为两位,"0x","xy"的形式),其第一位位于 res[i+j],第二位位于 res[i+j+1]。
//11*12 =132  1和2相乘的结果为2的下标加1的下标,假设1的下标代表2乘了几个10(0下标开始的话)
		for (int i = n1; i >= 0; i--)
			for (int j = n2; j >= 0; j--) { //11 12
				int bitmul = (num1[i] - '0')*(num2[j] - '0');//两个位上的数的乘积
				bitmul += mul[i + j + 1];//先加低位,判断是否有新的进位

				mul[i + j] += bitmul / 10;//高位
				mul[i + j + 1] = bitmul % 10;//低位
			}

		//去掉前导0
		int i = 0;
		while (i < n1 + n2 + 1 && mul[i] == 0)
			i++;
		int index = i;
		string multi=string(n1+n2+2-i,'0');
		for (; i < n1 + n2 + 2; i++)
			multi[i-index]=(mul[i]+'0');//string类型的append函数
		return multi;
	}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数相加和大数相乘 的相关文章

  • vue 按需引入 element-ui 组件

    新建 plugins element ui js 文件 在里面写入需要引入的组件 import Vue from vue import Button Dialog Form FormItem Loading Message Paginati
  • java char判断相等_java面试题-基础

    1 一个 java 源文件中是否可以包括多个类 不是内部类 有什么限制 可以有多个类 但只能有一个public的类 并且public的类名必须与文件名相一致 2 Java有没有goto java中的保留字 现在没有在java中使用 3 说说
  • 搭建: canal部署与实例运行

    1 准备 github https github com alibaba canal 里面有包括canal的文档 server端 client端的 例子 源码包等等 2 canal概述 canal是应阿里巴巴存在杭州和美国的双机房部署 存在

随机推荐

  • Adobe XD 连不上网用不了插件的解决办法

    安装了xd想用插件发现 提示 请先链接网络 只要注册一个所在地在美国的账号即可联网成功 操作如下 1 依次点击菜单栏帮助 登录 2 点击创建账户 3 输入邮箱和密码 邮箱可以随便输入 但要记住密码方便后期登录 但如果后期忘记了密码可以通过邮
  • Linux(CentOS)安装Zookeeper

    前置环境是装好Java环境 然后去zookeeper官网下载 http mirror bit edu cn apache zookeeper 下载好后把压缩包上传到服务器 去到服务器地下解压 tar zxvf apache zookeepe
  • 96. 不同的二叉搜索树

    96 不同的二叉搜索树 给你一个整数 n 求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种 返回满足题意的二叉搜索树的种数 二叉搜索树的定义 二叉搜索树是一个有序树 若它的左子树不空 则左子树上所有结点的值均小
  • Java架构直通车——Kafka介绍和高性能原因

    文章目录 Kafka介绍 Kafka高性能原因 Kafka介绍 Kafka以前说过很多次了 包括了Kafka单独的介绍 Kafka与Fabric 这里知识简单说说 Kafka的主要特点就是基于Pull模式来处理消息消费 追求高吞吐量 一开始
  • JavaScript应该被放在什么位置

    1 JavaScript被放在中 首先我们要知道的是HTML 文档加载顺序是从上至下被加载的 而且加载途中遇到JavaScript的代码时就会把JavaScript的代码放入缓冲中 当浏览器找到与它相关的标签时才进行匹配 当我们把JavaS
  • IRQL的理解和认识

    介绍 中断请求 IRQ Interrupt Request 一般有两种 一种是外部中断 也就是硬件产生的中断 例如 键盘中断 打印机中断 定时器中断 另一种是由软件指令 int n 产生的中断 例如 INT 3 断点中断 INT 1 单步中
  • (附源码)springboot+mysql+基于Java web的电动车销售平台 毕业设计201524

    电动车销售平台的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径 但是途径的扩展基本上为人们所努力的方向 由于站在的角度存在偏差 人们经常能够获得不同类型信息 这也是技术最为难以攻克的课题 针对电动车销售平台等问题 对电动车销售
  • ES系列--分析器

    一 前言 ES进行文档分析就会涉及到分析器 无论是内置的分析器 还是自定义的分析器 都是由一个分词器 tokenizers 0或多个词项过滤器 token filters 0或多个字符过滤器 character filters 组成 二 内
  • 数据结构基本概念、线性表、顺序表

    一 头文件 head h ifndef HEAD H define HEAD H include
  • 蓝桥杯每日一题(30)单词分析(python)

    Topic 试题 G 单词分析 时间限制 1 0s 内存限制 512 0MB 本题总分 20 分 问题描述 小蓝正在学习一门神奇的语言 这门语言中的单词都是由小写英文字母组成 有些单词很长 远远超过正常英文单词的长度 小蓝学了很长时间也记不
  • 简述前端MVVM框架

    一张图说明 1 一句话总结 vm层 视图模型层 通过接口从后台m层 model层 请求数据 vm层继而和v view层 实现数据的双向绑定 2 mvc和mvvm的关系 c 控制层 被换成了vm viewmodel 层 MVVM是Model
  • TypeScript 总结

    文章目录 TypeScript 总结 概述 运行ts文件 方式一 方式二 基础 声明变量 类型 数组 元组 联合类型 取值限制 枚举类型 any unknown void undefined 类型适配 面向对象 函数 普通函数 箭头函数 可
  • 2.2-base-num-str

    for i in range 9 0 1 for j in range 1 i 1 print f j i str i j ljust 2 end print 1 9 9 2 9 18 3 9 27 4 9 36 5 9 45 6 9 54
  • 网络设备自动化运维工具——ansible入门笔记

    Ansible概述 Ansible是一款自动化运维工具 基于Python开发 集合了众多运维工具 Puppet CFengine Chef SaltStack 的优点 实现了批量系统配置 批量程序部署 批量运行命令等功能 Ansible是基
  • 管理者一定要戒掉这五个毛病,否则迟早被淘汰出局

    在职场中 很多人都想升职加薪 但是不是每个人都有能力当一个好的领导 有的人不断的为之努力 有的好不容易当上了领导 可以结果时间不长反而被辞退 并不是他们不够努力 而是当员工和领导有很大的差别 你的思维要及时调整 如果思维还停留在以前 那么只
  • rsyslog无法发送日志到server端问题定位

    问题描述 网络正常的情况下 代码端中使用openlog无法正常将日志发往syslog服务器 即使使用logger也无法正常发送 环境 ARM设备充当client端 pc虚拟机Ubuntu充当server端 验证方式 通过wireshark抓
  • 基于AF的HTTP

    搬搬砖头而已 iOS 基于AF的HTTP请求类 OKHTTPRequestManager h OKHTTPRequestManager h LL Created by Morris on 2020 9 22 Copyright 2020 L
  • 蓝桥杯训练——最小乘积(基本型)

    试题 算法训练 最小乘积 基本型 资源限制 时间限制 1 0s 内存限制 512 0MB 问题描述 给两组数 各n个 请调整每组数的排列顺序 使得两组数据相同下标元素对应相乘 然后相加的和最小 要求程序输出这个最小值 例如两组数分别为 1
  • Java设计模式——单例模式

    文章目录 为什么要用单例模式 单例模式 饿汉式 DCL 静态内部类 为什么要用单例模式 单例对象 Singleton 是一种常用的设计模式 在Java应用中 单例对象能保证在一个JVM中 该对象只有一个实例存在 这样的模式有几个好处 某些类
  • 大数相加和大数相乘

    1 大数相加 int或者long类型的数据往往满足不了数据容量的要求 这时需要用到数组或者字符串进行操作 考虑到数据的位数并不是一个确定的值 运用string来处理可以简化思维 在进行运算之前 需要明确下面几点要求 1 将两组数据中位数大的