C++每日一练:难题-大数加法

news2024/10/6 8:34:40

文章目录

  • 前言
  • 一、题目
  • 二、代码及思路
  • 总结


前言

这题好像是指定了C++,那就用C++来做嘛,确实在C/C++中一不小心就超出范围了,说实在的,C++这个语言有时候真的很让人无语。很显然这是要用字符串来计算了。这题坑比较多,笔者这也是折腾了好一会儿才搞定。
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目

题目描述:
大数一直是一个c语言的一个难题。 现在我们需要你手动模拟出大数加法过程。 请你给出两个大整数加法结果。

输入描述:
第一行输入整数n,第二行输入整数m。 (1<=number<=1e100)

输出描述: 输出两数加和。

二、代码及思路

代码如下(示例):

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;
string solution(string n, string m){   //这里要改成字符串参数
    string result;     //这里要改成字符串
    // TODO:
    string sn = n;          //to_string(n);
    string sm = m;          //to_string(m);
    if (sn.length() > sm.length()){
        string tmp = sn;
        sn = sm, sm = tmp;
    }
    int len_sn = sn.length();
    int len_sm = sm.length();
    int forward = 0;       //进位
    string sum;           //结果
    string more = sm.substr(0, len_sm-len_sn); 
    while (len_sn > 0){
        int num_m = sm[len_sm-1] - '0';
        int num_n = sn[len_sn-1] - '0';
        int val = num_m + num_n + forward;
        forward = val/10;
        sum = to_string(val%10) + sum;
        len_sn--, len_sm--;
    }
    int len_more = more.length();
    while (len_more > 0){
        int _m = more[len_more-1] - '0';
        int val = _m + forward;
        forward = val/10;
        sum = to_string(val%10) + sum;
        len_more--;
    }
    if (forward) sum = '1' + sum;
    result = sum;
    return result;
}

int main() {
    string n;  //这里要改成字符串
    string m;  //这里要改成字符串
    std::cin>>n;
    std::cin>>m;
    string result = solution(n, m);  //这里要改成字符串
    std::cout<<result<<std::endl;

    return 0;

看上去代码有点多,其实思路挺简单的。这是写复杂了,可以优化的。笔者这里偷懒了,就这样吧,反正结果正确就好。

首先把输入的n、m改成字符串输入,不然只能过40%,这题中已有代码就是个大坑!同样,它们作为参数传递也得改类型,以及solution函数的返回类型都要改。笔者是后来实在找不到毛病才想到的,所以代码中有sn = n这么傻的写法。因为我原来没改,是用来把long long int转成string的。后来想想输入要求1e100…

这里还存在一个长度问题,因为我们不知道哪个字符更长,后面循环时就有可能越界,也为了方便计算出more部分。所以代码一开始就固定了m比n长或相等。

然后又定义了more这个用来表示m比n长出的从0到超过的位数。计算完相同长度后再在前面加上more和进位的计算。

然后就简单了,把字符串的最后一个字符加或减0,它就强制转换成int了,把n和m从后到前的每一位相加,forward是用来存进位的,forward初始值是0,每次都要加上进位。后面的第二个while的逻辑和这里相加是一样的,第二个while是计算上述more部分的,只有进位的计算。

在计算完more部分后,还是有可能有进位的!这里就用了if直接写上一个1,二个数相加,进位最大就是1。


总结

这道题目挺有意思的,也存在不少坑,可能题目是故意这么出的。比较考验阅读理解能力,计算结果如果太大是没法再转换成int的。希望读者能从本文获得些许灵感。

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

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

相关文章

数据库使用自增ID好还是UUID好?为什么?

数据库使用自增ID好还是UUID好&#xff1f;为什么&#xff1f; 答&#xff1a; 自增ID 优点&#xff1a; 数字类型&#xff0c;占用空间小数据库自动增量排序&#xff0c;对检索有利&#xff0c;读写速度快&#xff08;聚簇索引的优势&#xff09;系统编码过程中&#xff0…

知识推理学习笔记

OWL本体语言 基于RDF语法&#xff0c;最规范&#xff0c;最严谨&#xff0c;表达能力最强 一 语法 三元组 二 逻辑基础 描述逻辑&#xff1a;基于对象的知识表示的形式化&#xff0c;是一阶谓词逻辑的一个可判定子集 三 描述逻辑系统 一个描述逻辑包含4个基本组成部分 …

【Python数据存储】零基础也能轻松掌握的学习路线与参考资料

Python是一种高级编程语言&#xff0c;被广泛应用于数据科学中。数据存储是数据科学中至关重要的一环&#xff0c;因为人们需要将收集到的数据保存在一些地方。Python中的数据存储有很多种&#xff0c;因此在学习过程中需要明确自己的需求&#xff0c;掌握不同数据存储方式的优…

深入理解 python 虚拟机:多继承与 mro

深入理解 python 虚拟机&#xff1a;多继承与 mro 在本篇文章当中将主要给大家介绍 python 当中的多继承和 mro&#xff0c;通过介绍在多继承当中存在的问题就能够理解在 cpython 当中引入 c3 算法的原因了&#xff0c;从而能够帮助大家更好的了理解 mro 。 python 继承的问题…

【Linux】shell编程之—函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、概述二、函数的查看和删除1.查看 declare2.删除 declare 三、函数的返回值1.return 返回值2.echo 返回值 四、函数的参数传入与变量范围五、函数的应用1.阶乘2.…

十五、Gateway网关

目录 Zuul网关和gateway网关的区别&#xff1a; Gateway路由配置 1、新建服务网关项目&#xff0c;并在项目pom文件中引入gateway网关依赖 2、在application.yml配置gateway 3、如果不用配置的方式配置gateway路由&#xff0c;还可以通过代码的形式配置 4、启动网关服务&…

达梦:创建用户并授予用户只读权限

需求描述&#xff1a; 1.想创建一个用户&#xff0c;这用户能访问其他3个用户的资源&#xff0c;权限是只读&#xff0c;这种创用户的sql怎么写&#xff1f; 2.怎么修改用户密码呢&#xff1f; 环境&#xff1a; 通用机 一、创建用户并授权 1.创建业务用户步骤 step1:创建用户使…

短期光伏发电量短期预测(Python代码,基于LSTM模型)

一.代码流程&#xff08;运行视频&#xff1a;短期光伏发电量短期预测&#xff08;Python代码&#xff0c;基于LSTM模型&#xff09;_哔哩哔哩_bilibili&#xff09; 数据预处理&#xff1a; 读取CSV文件&#xff0c;并使用Pandas库将数据加载到DataFrame中。将时间列转换为日期…

PoseiSwap缘何成DEX赛道新宠?POSE价值分析

区块链技术以去中心化、伪匿名以及公开透明作为主要特点&#xff0c;虽然这种意识形态是具备先进性的&#xff0c;但以此为基础所带来的加密原生特性&#xff0c;也正在阻碍着链上世界的发展。作为一种透明、非许可的分布式网络&#xff0c;隐私与合规始终是现阶段&#xff0c;…

【AWK命令】

目录 一、awk的工作原理&#xff1a;二、命令演示1、按行输出文本2、按字段输出文本1、使用三元运算符 三、通过管道&#xff0c;双引号调用shell命令1、查看时间的命令2、getline 获取内容3、OFS输出分割符4、awk来排序数组 一、awk的工作原理&#xff1a; 1、逐行读取文本&a…

华为OD机试真题 Java 实现【日志采集系统】【2023Q1 100分】

一、题目描述 日志采集是运维系统的的核心组件。日志是按行生成&#xff0c;每行记做一条&#xff0c;由采集系统分批上报。 如果上报太频繁&#xff0c;会对服务端造成压力&#xff1b;如果上报太晚&#xff0c;会降低用户的体验&#xff1b;如果一次上报的条数太多&#xf…

MSQL系列(一) Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/B+Tree

Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/BTree 我们在项目中都会使用索引&#xff0c;所以我们要了解索引的存储结构&#xff0c;今天我们就着重讲解下Mysql的索引结构存储模型&#xff0c;并且看下 二叉树&#xff0c;平衡二叉树&#xff0c;红黑树&#xff0c;B…

沉浸式翻译 – 沉浸式的阅读与学习双语的翻译工具

为何称为沉浸式呢 智能识别网页主内容区进行翻译&#xff0c;与同类插件翻译整个网页不同&#xff0c;降低对原网页的“侵入性”&#xff0c;提升阅读体验&#xff0c;因此得名“沉浸式翻译”。 受宠的缘由 自从谷歌翻译不再对大陆用户提供服务后。内心是一阵酸痛的&#xf…

ML之LoR:基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用案例

ML之LoR&#xff1a;基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用案例 目录 基于泰坦尼克号数据集分别利用Platt校准和等距回归校准算法实现概率校准进而提高二元分类模型的预测准确性(模型提效)应用…

网络安全35岁是新时代挑战?

前言 对于一个工作不下于4年的人来说&#xff0c;我觉得我有一定的思考沉淀来回答这个问题。 说说我的一些经历吧。 普通一本毕业&#xff0c;专业是自动化&#xff0c;大学由于挂科太多没拿到学位证到上海找实习&#xff0c;一开始做的是开发&#xff0c;从16年到19年都是做…

如何在线安装Axure插件?

当我们需要进行原型设计时&#xff0c;Axure 成为了专门为此而生的专业级设计产品&#xff0c;也是产品经理必备的工具之一。通过使用 Axure&#xff0c;设计人员可以更好地了解实际项目的实施方式&#xff0c;并与产品经理进行更有效的合作&#xff0c;以评估范围和技术可行性…

HTTP1.1(五)URI编码

一 URI编码 ① ASCII wiki 说明&#xff1a; man ascii 观察 ② 为什么要进行URI编码 RFC3986规定&#xff1a;uri中只允许包含a-zA-Z、0-9、-_.~4个特殊字符以及所有保留字符 URI特殊字符 ③ 保留字符与非保留字符 ④ URI百分号%编码方式 说明&#xff1a; 一般是非…

自学网络安全必经的三个阶段(含路线图)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

【pytest】html报告修改和汉化

前言 Pytest框架可以使用两种测试报告&#xff0c;其中一种就是使用pytest-html插件生成的测试报告&#xff0c;但是报告中有一些信息没有什么用途或者显示的不太好看&#xff0c;还有一些我们想要在报告中展示的信息却没有&#xff0c;最近又有人问我pytest-html生成的报告&a…

算法 DAY59 单调栈2 503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形

503.下一个更大元素II 难点在于如何是实现数组的循环 但使用模拟遍历两次的时候注意始终使用index&#xff0c;别出现越界 class Solution { public:vector<int> nextGreaterElements(vector<int>& nums) {stack<int> st;st.push(0);vector<int>…