AcWing 791. 高精度加法 解题记录
题目地址 https://www.acwing.com/problem/content/description/793/
题目描述
给定两个正整数,计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
算法
很明显 输入会超过64位 也就是即使long long 类型也不能进行常规加法
那么输入就是用string 接收字符串 来模拟加法
加法主要是三个数字的相加 数字a 数字b 以及进位
所以 int sum = (a - '0') + (b - '0') + next;
然后得到除开进位后本地应该显示的数字 int local = sum % 10;
计算进位 next = sum / 10;
由于加法是从最小位开始的 所以字符串做了逆转
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
还要考虑数字a 和数字b 位数不同的情况
while (i < a.size() && i < b.size()) {
add(a[i], b[i], next);
i++;
}
while (i < a.size()) {
add(a[i], '0', next);
i++;
}
while (i < b.size()) {
add('0', b[i], next);
i++;
}
还有一种特殊情况,最后一位还要进位
也就是最后的和 比最大的数还要多一位1 记得最后判断下
if (next == 1)
v.push_back(1);
最后显示记录结果 记得也要做逆转
reverse(v.begin(), v.end());
for (int i = 0; i < v.size(); i++)
{
cout << v[i];
}
#include <iostream>
#include <string>
#include <algorithm>
#include <vector> using namespace std; string a,b;
vector<int> v; void add(int a,int b,int& next)
{
int sum = (a - '') + (b - '') + next;
int local = sum % ;
v.push_back(local);
next = sum / ;
} int main()
{
cin >> a >> b; reverse(a.begin(),a.end());
reverse(b.begin(), b.end()); int i = ; int next = ;
while (i < a.size() && i < b.size()) {
add(a[i],b[i],next);
i++;
} while (i < a.size()) {
add(a[i],'',next);
i++;
} while (i < b.size()) {
add('',b[i],next);
i++;
}
if (next == )
v.push_back();
reverse(v.begin(), v.end());
for (int i = ; i < v.size(); i++)
{
cout << v[i];
} return ; } 作者:defddr
链接:https://www.acwing.com/solution/AcWing/content/2074/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
AcWing 791. 高精度加法 解题记录的更多相关文章
- AcWing 791. 高精度加法
https://www.acwing.com/problem/content/793/ #include<bits/stdc++.h> using namespace std; vecto ...
- SCAU1143 多少个Fibonacci数--大菲波数【杭电-HDOJ-1715】--高精度加法--Fibonacci数---大数比较
/*******对读者说(哈哈如果有人看的话23333)哈哈大杰是华农的19级软件工程新手,才疏学浅但是秉着校科联的那句“主动才会有故事”还是大胆的做了一下建一个卑微博客的尝试,想法自己之后学到东西都 ...
- 51Nod 1005 有负数的高精度加法
51Nod是个好地方啊 题意 51Nod基础题第二题,高精度加法,可能有负数. 解题 如果按照一般的高精度,我们发现要分情况讨论,还要写高精度加法和减法,代码实现有点烦.而初中数学里说,省略加号的和. ...
- NEFU 2016省赛演练一 F题 (高精度加法)
Function1 Problem:F Time Limit:1000ms Memory Limit:65535K Description You know that huicpc0838 has b ...
- java算法 蓝桥杯 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
- 用c++实现高精度加法
c++实习高精度加法 最近遇到一个c++实现高精度加法的问题,高精度问题往往十复杂但发现其中的规律后发现并没有那么复杂,这里我实现了一个整数的高精度加法,主要需要注意以下几点: 1:将所需输入的数据以 ...
- pwnable.kr input解题记录
pwnable input解题记录 给了源码如下: #include "stdio.h" #include "unistd.h" #include " ...
- 高精度加法——经典题 洛谷p1601
题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 ...
- 高精度加法--C++
高精度加法--C++ 仿照竖式加法,在第一步计算的时候将进位保留,第一步计算完再处理进位.(见代码注释) 和乘法是类似的. #include <iostream> #include < ...
随机推荐
- python基础(36):pymysql模块
1. pymysql模块 在使用pymysql模块前需要学习数据库MySQL:<MySQL基础>. 1.1 pymysql的下载和使用 看完MySQL基础,我们都是通过MySQL自带的命令 ...
- c++11 auto 与auto& 遍历vector区别
目录 说明 c++11 auto 与auto& 遍历区别 今天被这个问题坑了一天,一直以为是算法错了,debug了一天,最后暴力生成数据才发现,测试代码如下: 说明 转载请注明出处:https ...
- rocksdb学习笔记
rocksdb是在leveldb的基础上优化而得,解决了leveldb的一些问题. 主要的优化点 1.增加了column family,这样有利于多个不相关的数据集存储在同一个db中,因为不同colu ...
- Linux基础命令---ntpstat显示时间服务器同步
ntpstat ntpstat指令用于显示本机上一次和服务器同步时间的情况. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 ntpstat 2 ...
- JavaScript-----13.内置对象 Math()和Date()
1. 内置对象 js对象分为3种:自定义对象(var obj={}).内置对象.浏览器对象. 前两种对象是js基础内容,属于ECMAScript,第三个浏览器对象是js独有的.讲js API的时候会讲 ...
- 如何开启php错误日志
nginx与apache不一样,在apache中可以直接指定php的错误日志,那样在php执行中的错误信息就直接输入到php的错误日志中,可以方便查询. 在nginx中事情就变成了这样:nginx只对 ...
- javascript截取字符串的最后几个字符
在JavaScript中截取字符串一般是使用内置的substring()方法和substr()方法,这两个方法功能都很强大,也都能实现截取字符串中的最后几个字符. substring()方法 Java ...
- jvm虚拟机笔记<一> 内存区域
运行时数据区域: 程序计数器:字节码的行号指示器. 虚拟机栈:为每个方法创建一个栈帧(存放方法中的局部变量,变量引用等). 本地方法栈:存放本地方法. ------------------------ ...
- 写了个爬虫代理ip的脚本给大家使用
写了个爬虫代理ip的脚本给大家使用 一.代码 import requests from lxml.html import etree url = 'http://www.kuaidaili.com/f ...
- Python小练习:StringIO和BytesIO读写操作的小思考
from io import StringIO; f = StringIO(); f.write('Hello World'); s = f.readline(); print s; 上面这种方法&q ...