当前位置: 首页 > news >正文

C++ 大数相加

写在前面

首先,我们需要搞懂什么是“大数”。一般而言,大数往往说的是数据长度可能很大,int、long、long long无法存放。比如说:在16位的机器中,unsigned int的最大长度为 2^16 - 1(也就是65536-1=65535)。但是现实中,非常可能会遇到比这个数字更大的数字运算,所以也就是为什么会有标题所说的“大数相加”了。

基本思路

将数字先存储在字符串中,再在字符串中从“低位”开始,逐个取数字进行十进制的加法运算,然后再把结果记录到字符串中。

示例代码

#include <iostream>
#include <string>
using std::endl;
using std::string;string BigNumberPlus(string num1, string num2)
{//默认使得num1位数大于num2,方便后续运算。if (num1.size() < num2.size()){string temp = num2;num2 = num1;num1 = temp;}//初始化位数、进位标志、定义转换数字a、b和sumint lenth1 = num1.size(), lenth2 = num2.size(), flag = 0, a, b, sum;while (lenth1 > 0) {//lenth1总是大于等于lenth2a = 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;//返回得到的和
}int main()
{std::string v1 = "1234567890000000000";std::string v2 = "987654321";string ret = BigNumberPlus(v1, v2);std::cout << ret << endl;//1234567890987654321return 0;
}

相关文章:

  • 在WPF应用程序集中添加新文件时,Page和Window有什么区别
  • Flutter笔记:桌面应用 窗口定制库 bitsdojo_window
  • 生成对抗网络Generative Adversarial Network,GAN
  • 索引三星结构
  • Jmeter 如何监控目标服务的系统资源
  • 04-快速掌握Redis,了解Redis中常见的结构类型及其应用场景
  • Python+Selenium WebUI自动化框架 -- 基础操作封装
  • YOLOv5 配置C2模块构造新模型
  • 飞天使-django之数据库简介
  • 网页开发如何实现简易页面跳动/跳转,html课堂练习/作业,页面ABC的相互跳转
  • CDN加速在目前网络安全里的重要性
  • C#的MessagePack(unity)--02
  • 【MySQL】数据类型
  • 阿里云CentOS主机开启ipv6
  • Spring Boot - devtools 热部署
  • hexo+github搭建个人博客
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 230. Kth Smallest Element in a BST
  • Effective Java 笔记(一)
  • golang中接口赋值与方法集
  • Koa2 之文件上传下载
  • LintCode 31. partitionArray 数组划分
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • 记录一下第一次使用npm
  • 坑!为什么View.startAnimation不起作用?
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端知识点整理(待续)
  • 区块链技术特点之去中心化特性
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用jQuery怎么做到前后端分离
  • 用Python写一份独特的元宵节祝福
  • 云大使推广中的常见热门问题
  • AI算硅基生命吗,为什么?
  • (1)(1.11) SiK Radio v2(一)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (pojstep1.3.1)1017(构造法模拟)
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (六)vue-router+UI组件库
  • (三)elasticsearch 源码之启动流程分析
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (数据结构)顺序表的定义
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (原創) 物件導向與老子思想 (OO)
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net6 Api Swagger配置
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @RequestMapping-占位符映射