【洛谷 P1601】A+B Problem(高精)题解(高精度+向量)

简介: 该问题要求解决高精度加法(正数)的A+B问题。给定两个不超过10^500的大整数a和b,程序需输出它们的和。样例输入包括两个整数,如1和1,输出为2;另一样例是1001和9099,输出为10100。解决方案通过模拟十进制加法实现,代码使用C++,将输入转换为字符数组,然后逐位相加并处理进位。最终结果反向输出。

A+B Problem(高精)

题目描述

高精度加法,相当于 a+b problem,不用考虑负数

输入格式

分两行输入。$a,b \leq 10^{500}$。

输出格式

输出只有一行,代表 $a+b$ 的值。

样例 #1

样例输入 #1

1
1

样例输出 #1

2

样例 #2

样例输入 #2

1001
9099

样例输出 #2

10100

思路

模拟十进制加法,逢10进一。

AC代码

#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
#define AUTHOR "HEX9CF"
using namespace std;

const int maxn = 100005;

void printv(vector<int> v){
   
    vector<int>::iterator it = v.begin();
    for(; it != v.end(); it++){
   
        cout << *it;
    }
}

int main() {
   
    char ch;
    string str1, str2;
    stringstream ss1, ss2;
    vector<int> v1, v2, v3;
    cin >> str1 >> str2;
    ss1 << str1;
    ss2 << str2;
    while(ss1 >> ch){
   
        v1.push_back(ch - '0');
    }
    while(ss2 >> ch){
   
        v2.push_back(ch - '0');
    }
    reverse(v1.begin(), v1.end());
    reverse(v2.begin(), v2.end());
    vector<int>::iterator it1 = v1.begin();
    vector<int>::iterator it2 = v2.begin();
    for(;it1 != v1.end() && it2 != v2.end();it1++, it2++){
   
        int sum = *it1 + *it2;
        v3.push_back(sum);
    }
    for(;it1 != v1.end();it1++){
   
        v3.push_back(*it1);
    }
    for(;it2 != v2.end();it2++){
   
        v3.push_back(*it2);
    }
    vector<int>::iterator it3 = v3.begin();
    int flg = 0;
    for(;it3 != v3.end(); it3++){
   
        if (*it3 > 9)
        {
   
            *it3 -= 10;
            if (v3.end() == it3 + 1)
            {
   
                flg = 1;
            }
            else
            {
   
                *(it3 + 1) += 1;
            }
        }
    }
    if(flg){
   
        v3.push_back(1);
    }
    reverse(v3.begin(), v3.end());
    printv(v3);

    return 0;
}
目录
相关文章
|
Linux C++
通过C/C++代码设置Linux系统时间的方法与实例
Linux系统中的时间设置是关键任务之一,涉及日志记录、数据同步等众多应用场景。本文将详细介绍如何通过C/C++代码设置Linux系统时间,包括调用系统调用和使用第三方库,同时提供实例演示。
2560 2
|
12月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
2363 0
高精度算法(加、减、乘、除,使用c++实现)
|
数据安全/隐私保护
【洛谷 P1928】外星密码 题解(递归+字符串)
外星密码挑战涉及解压缩由重复子串压缩的字符串,如`[3FUN]`代表`FUNFUNFUN`。输入是一行压缩过的字符串,输出是解压缩的结果。代码使用递归方法,遇到`[`读取重复次数并解压下一层,遇到`]`返回当前层结果,否则直接添加字符。样例输入`AC[3FUN]`输出`ACFUNFUNFUN`。处理的数据限制为解压后长度在20000内,最多十重压缩。
249 0
|
12月前
|
Java 关系型数据库 MySQL
数据库的连接用Java
本文介绍了如何使用Java连接MySQL数据库,包括注册JDBC驱动、创建数据库连接URL、设置数据库用户和密码、建立连接以及关闭连接的完整代码示例。
321 0
数据库的连接用Java
|
存储
【洛谷 P2437】蜜蜂路线 题解(递归+记忆化搜索+高精度)
蜜蜂路线问题:蜜蜂从蜂房$m$到$n$($m&lt;n$)按数字递增爬行。给定$m$和$n$,求路线数。示例:$m=1$,$n=14$,输出$377$。100%数据$1\leq m,n\leq1000$。使用斐波那契序列优化,高精度处理大数。代码实现斐波那契存储并动态规划求解。
255 0
【洛谷 P1002】[NOIP2002 普及组] 过河卒 题解(递归+记忆化搜索)
`NOIP2002`普及组的过河卒问题是一个棋盘路径计数挑战。卒从$(0,0)$出发到$(n,m)$,只能向下或向右移动,马在$(c1,c2)$固定,控制某些点。任务是计算不受马阻挡的路径数。输入是目标和马的位置,输出是路径总数。使用动态规划和记忆化搜索避免重复计算,样例输入$(6,6,3,3)$输出$6$。代码中定义了$f(x,y)$计算$(x,y)$处的路径数,利用边界条件和递推关系计算。
206 0
|
SQL 关系型数据库 MySQL
MySQL数据库——视图-检查选项(cascaded、local)
MySQL数据库——视图-检查选项(cascaded、local)
588 0
|
C语言 C++
信奥赛一本通1142:单词的长度
【题目描述】 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。 注意:如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。 【输入】 一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。 【输出】 依次输出对应单词的长度,之间以逗号间隔。
662 0
|
算法 C语言
(“拨”取数字的典例:N位水仙花数判断及水仙花数变种)
这篇内容介绍了如何判断和生成水仙花数,水仙花数是一个n位数,其各位数字的n次方之和等于该数本身。文章首先回顾了"拨数"的概念,然后通过实例展示了如何判断三位水仙花数,并将其推广到任意位数的水仙花数。作者提供了详细的解题思路和代码示例,强调了解决这类问题时要慢下来,分步骤分析问题。最后,文章还探讨了一个水仙花数的变种问题,即数字拆分后乘积之和等于原数的情况。
1064 0
|
机器学习/深度学习 C语言
【C/PTA】循环结构专项练习(选择+填空)
【C/PTA】循环结构专项练习(选择+填空)
556 0