首页 > 编程语言 >C++ 不用现成的类库 实现两个非负整数的字符串的和

C++ 不用现成的类库 实现两个非负整数的字符串的和

时间:2023-07-20 23:34:03浏览次数:34  
标签:类库 p2 p1 val num2 非负 C++ add num1

给定两个非负整数的字符串num1 和num2 ,返回num1 与num2的和

Note:

  1.  num1 和 num2 长度都小于5100.
  2.  num1 和num2 只包含0-9的数字.
  3. num1 和num2 开头不为0.
  4. 不能用现成的类库直接将输入的字符串转换成整数

思路:从低位开始遍历相加,和≥10标记add_val=1,<10标记add_val=0,在下一位相加的时候加上这个数。我是每相加得到一个数,就在string前面insert一个数

注意:别忘了最后一位相加的时候如果和≥10得再最前面补个1

 

 1 //两个非负整数字符串求和
 2 string addStrings(string num1, string num2)
 3 {
 4     //合法字符[0,9];检测非法字符,开头不为0的非空字符串
 5     if (num1.size() <= 0 || num2.size() <= 0 || num1[0] == '0' || num2[0] == '0')
 6         return "error num string";
 7 
 8     string dst = "";
 9 
10     int add_val = 0;//0为不进1,1为向前进1
11     int p1 = num1.size() - 1;
12     int p2 = num2.size() - 1;
13     while(p1 >= 0|| p2 >= 0)//个位数开始相加
14     {
15         //合法字符[0,9];检测非法字符
16         if ((p1 >= 0 &&  (num1[p1] < '0' || num1[p1] > '9')) || 
17             (p2 >= 0 && (num2[p2] < '0' || num2[p2] > '9')))
18             return "error num string";
19 
20         int val1 = p1 >= 0 ? num1[p1] - '0' : 0;
21         int val2 = p2 >= 0 ? num2[p2] - '0' : 0;
22         int sum_val = val1 + val2 + add_val;
23         if (sum_val > 9)
24         {
25             add_val = 1;
26             sum_val -= 10;
27         }
28         else
29         {
30             add_val = 0;
31         }
32         dst.insert(dst.begin(), sum_val + '0');
33 
34         p1--;
35         p2--;
36     }
37     if (add_val > 0)//最后一位是否进1
38     {
39         dst.insert(dst.begin(), '1');
40     }
41 
42     return dst;
43 }

 

标签:类库,p2,p1,val,num2,非负,C++,add,num1
From: https://www.cnblogs.com/ping-code/p/17569997.html

相关文章

  • C++数值计算——矩阵类的实现(一)
    本系列博客将利用C++实现一系列数值算法。数值算法离不开矩阵,但是C++并未自带矩阵这一对象,直接使用数组又会带来诸多不便,因此我们需要做一些预备工作————编写一个矩阵类,实现矩阵的基本功能。一般来说,读者可以直接使用Eigen库进行矩阵计算,从头开始造轮子仅仅是为了满足笔者个人......
  • 7.20 c++
    //高精度加法#include<bits/stdc++.h>usingnamespacestd;intmain(){chara1[5005],b1[5005];inta[5005],b[5005],c[5005];intla,lb,lc=1,x=0,i;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));c......
  • c++ day 13
    今天来认识c++里面的迭代器C++迭代器(Iterator)是一种用于遍历容器(如数组、向量、链表等)中元素的抽象概念。它允许你通过简单的接口在容器中移动,并访问容器中的元素,而无需了解底层数据结构的细节。迭代器提供了一种统一的方式来访问不同类型容器的元素,使得代码更加灵活和可复用。......
  • 对 Word 文档进行操作的 .NET 类库
    如何使用.NET类库操作Word文档简介在.NET开发中,我们可以使用MicrosoftOffice的COM组件来操作Word文档。COM(ComponentObjectModel)是一种微软提供的组件对象模型,它允许我们在不同的应用程序之间进行交互。通过使用COM组件,我们可以通过编写.NET代码来控制Word,并......
  • C++Const变量的存储位置
    const变量/对象的存储位置const局部变量const局部基础变量和自定义变量都存储在栈上structdiy_class{inta;intb;diy_class(inta,intb):a(a),b(b){}};intmain(){intb=1;//这个肯定在栈上constinta=10;//比较ab两个变......
  • C++架构师 课程目录
    C++架构师课程目录实现指南规划流程在实现"C++架构师课程目录"之前,我们需要先规划整个流程。以下是实现该功能的步骤:步骤描述1.创建课程目录类创建一个C++类来表示课程目录,并定义相关的成员变量和方法。2.添加课程实现向课程目录中添加课程的功能。3.删除课......
  • C++ 模板编程技术解析
    一、函数模板函数模板实现通用函数,根据传递类型进行编译时实参推导:template<typenameT>Tadd(Ta,Tb){returna+b;}intmain(){intx=1,y=2;doublem=1.5,n=2.5;intz=add(x,y);doublep=add(m,n);return0;}这里te......
  • C++/C的#pragma参数选项及其解析
    每种C和C++的实现支持对其宿主机或操作系统唯一的功能。例如,一些程序需要精确控制超出数据所在的储存空间,或着控制特定函数接受参数的方式。#pragma指示使每个编译程序在保留C和C++语言的整体兼容性时提供不同机器和操作系统特定的功能。编译指示被定义为机器或操作系统特定的,并且......
  • C/C++ 宏获取当前编译程序工作的CPU指令集平台(综合大全覆盖各类CPU)
    参考:https://blog.csdn.net/liulilittle/article/details/126644547?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-126644547-blog-43935465.235%5Ev38%5Epc_relevant_default_base3&dep......
  • Visual Studio新建项目配置好opencv环境,下次打开这个项目后属性管理器显示未加载visua
    配置opencv环境,可参考这篇博客:(82条消息)opencv之visualstudio开发环境配置(属性管理器+环境变量一劳永逸方便开发的配置方式)_opencv官网下载_仙魁XAN的博客-CSDN博客如出现打开这个项目后属性管理器显示未加载visualC++项目,可参考如下方法:1.解决方法:文件→打开→项目/......