用数学方法将两个字符串相加?

2023-12-25

我正在浏览论坛,但仍然找不到问题的答案。 我有两个字符串,它们实际上是一个数字数组。例如(我只是选择随机数

    string input1="12345678909876543212";
    string input2="12345";

我想将这两个字符串加在一起,但将它们像整数一样操作。 我的目标是创建一个类,在其中我可以添加比 (long long int) 更大的数字,因此它可以超过最大的 long long int 变量。

所以我毫无问题地反转字符串,所以现在有

  input1="21234567890987654321" 
  input2="54321"

然后我尝试将 input1[0]+input2[0] (2+5) 添加到一个新字符串中,我们将其称为 newString[0],其中等于 (7);但我找不到一种好方法来临时转换字符串中的当前数字,以便我可以将其添加到新字符串中?谁能帮忙。我厌倦了 atoi、stof、stod。它们似乎对我根本不起作用。 无论如何我都能让这个功能发挥作用。 我还不关心创建类,我只关心找到一种方法来以数学方式添加这两个字符串,但仍然保持 newString 的字符串格式。感谢任何能为我解决这个问题的人


好吧,假设你唯一的问题是逻辑,而不是类设计的问题,我想出了这个逻辑

  • 用 0 填充输入,检查长度,匹配长度
  • 像普通加法一样添加,跟踪进位
  • 最后从结果中删除前导零

所以使用std::transform http://en.cppreference.com/w/cpp/algorithm/transform在反向迭代器上使用 lambda 函数:-

char carry = 0;

std::transform(input1.rbegin(),input1.rend(),input2.rbegin(),
              result.rbegin(),[&carry]( char x,  char y){
    char z = (x-'0')+(y-'0') + carry;
    if (z > 9)
    {
        carry = 1;
        z -= 10;
    }
    else
    {
        carry = 0;
    }
    return z + '0';
});

//And finally the last carry
result[0] = carry + '0';

//Remove the leading zero
n = result.find_first_not_of("0");
if (n != string::npos)
{
    result = result.substr(n);
}

See Here http://ideone.com/o7wLTt

Edit “你能评论一下你在这里做什么吗”

                +--------+--------------+------------+-------> Reverse Iterator
                |        |              |            |
std::transform( | input1.rbegin(), input1.rend(),input2.rbegin(),
               result.rbegin(), [&carry]( char x,  char y){
               //This starts a lambda function
    char z = (x-'0')+(y-'0') + carry; // x,y have ASCII value of each digit
    // Substracr ASCII of 0 i.e. 48 to get the "original" number
    // Add them up
    if (z > 9) //If result greater than 9, you have a carry
    {
        carry = 1; // store carry for proceeding sums
        z -= 10; // Obviously 
    }
    else
    {
        carry = 0; //Else no carry was generated
    }
    return z + '0'; // Now you have "correct" number, make it a char, add 48
});

std::transform存在于标题中<algorithm>,请参阅 ideone 发布的链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用数学方法将两个字符串相加? 的相关文章

随机推荐

  • Android 音调生成器崩溃

    几天前 我收到了我发布的应用程序的崩溃日志 错误来自ToneGenerator 我找不到问题所在 在这里 我有一个倒计时器 当计时器达到 0 时 应用程序启动一个 ToneGenerator private void lanceMinute
  • 如何为 Java 类字段生成准确的泛型表达式?

    我试图在运行时推理泛型 有几个很棒的库可以做到这一点 例如 gentyref https code google com p gentyref 同学 https github com cowtowncoder java classmate
  • 如何根据名称为单个条形着色[重复]

    这个问题在这里已经有答案了 我有以下数据框生成以下图 Import pandas library import pandas as pd import numpy as np import matplotlib pyplot as plt
  • 如何启用映射实体的私有属性

    一开始我不得不对我的英语说抱歉 我正在使用实体框架和代码优先的方式 我脑子里有一个想法 但我不知道如何实现它 我不是编程初学者 但我一直在使用流利的 NHibernate 我有一个实体 public class User Key publi
  • Excel 互操作:Range.FormatConditions.Add 抛出 MissingMethodException

    我正在编写一个应用程序 它使用 Microsoft Office Interop Excel 程序集从 Excel 电子表格导出 导入数据 一切都很顺利 除了基于 1 的索引和所有这些可选参数 直到我尝试使用条件格式 当我调用 Range
  • 什么是有效的 HTML5 自定义标签?

    最近 我一直在阅读有关如何通过在名称中添加破折号来使自定义标签在 HTML5 中有效的内容 因此我一直想知道自定义标签的实际规则 指南是什么 custom tag custom X custom custom 我想知道的是最后两个是否有效
  • Apache 和 Node.js 在同一服务器上

    我想使用 Node 因为它速度很快 使用与我在客户端使用的语言相同的语言 并且根据定义它是非阻塞的 但是我雇来编写文件处理程序 保存 编辑 重命名 下载 上传文件等 的人 他想使用 apache 所以 我必须 说服他使用 Node 他对此几
  • 从 groovy 中访问 java 类

    我有一个简单的java类 package test class Hello public static void main String args System out println Hi 我在上面做了一个 javac Hello jav
  • 无法解决联合选择中的排序规则冲突

    我有两个疑问 首先不起作用 select hotels TargetCode as TargetCode from hotels union all select DuplicatedObjects duplicatetargetCode
  • Google Scripts - 在不同的工作表中触发和运行

    我需要 创建一个新工作表 调用主函数 设置一个将调用 main 函数的触发器 基本上是这样的 function new campaign var sheet name new sheet main function sheet name t
  • SQL 左连接将多行合并为一行

    基本上 我有两个表 表 A 包含我想要取出的实际项目 表 B 用于语言翻译 例如 表 A 包含实际内容 每当在表中使用文本时 都会存储与表 B 中存储的文本相关的 id 而不是存储实际的 varchar 值 这使我可以通过向表 B 中添加
  • Laravel Guzzle GET 请求

    client new Client base uri gt http api tvmaze com res client gt request GET schedule country US date 2014 12 01 return r
  • 为什么空数组引用的数组访问表达式不会抛出 NullPointerException?

    考虑以下代码 int r null r 0 1 0 我本以为这会引发NullPointerException 根据JLS 第 15 7 1 节 https docs oracle com javase specs jls se8 html
  • 如何在自己的 shell 中实现自己的 cd 命令[重复]

    这个问题在这里已经有答案了 我正在一个小型项目中工作 我自己的命令解释器 SHELL 例如 Bash shell 或 Sh shell 到目前为止 它可以执行所有预定义的命令 如 ls ps pwd date 除此之外 我还实现了一些其他操
  • 在不配置 Amazon Cognito 的情况下使用 Amazon Mobile Analytics

    与竞争的分析服务相比 Amazon Mobile Analytics 似乎需要更多的配置和集成步骤 例如 在 Flurry Analytics 中 设置非常简单 Flurry startSession
  • 输入格式是否负责在 Hadoop 的 MapReduce 中实现数据局部性?

    我试图了解数据局部性 因为它与 Hadoop 的 Map Reduce 框架相关 特别是我想了解哪个组件处理数据局部性 即它是输入格式吗 雅虎的开发者网络页面 http developer yahoo com hadoop tutorial
  • 如何使用斯坦福解析器

    我下载了Stanford parser 2 0 5 并使用包中的Demo2 java源代码 但编译并运行该程序后 出现很多错误 我的程序的一部分是 public class testStanfordParser Usage ParserDe
  • 如何消除颤振上文本上方和下方的间隙[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我试图将文本 Hello 放在 123 的正下方 但是文本越大 间隙就越大 怎样消除间隙 下面添加了颤振图像 到目前为止
  • 如何提取terraform中的敏感输出变量?

    我有一个 terraform 配置 它创建一个带有访问密钥的 AWS IAM 用户 并将 id 和 Secret 分配给输出变量 resource aws iam access key brand new user user aws iam
  • 用数学方法将两个字符串相加?

    我正在浏览论坛 但仍然找不到问题的答案 我有两个字符串 它们实际上是一个数字数组 例如 我只是选择随机数 string input1 12345678909876543212 string input2 12345 我想将这两个字符串加在一