使用C++的string实现高精度加法运算
对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算。
本文讨论借助C++的string来实现高精度的运算。
首先输入的量直接存储为string,设为s1和s2。
接下来设计一个反转函数,用于把整个字符串反转(为了方便后续计算)。
string reverseStr(string input){
    string output = "";
    for(int i = 0; i < input.length(); i++){
        output.insert(output.begin(),input[i]);
    }
    return output;
}
原理很简单,只需要取出string从前到后的每一个字符,每次都在头的前面插入,也就得到了反序。
下面讨论和的计算方式,先把s1和s2反转,这样从前到后遍历字符串时就是从低位到高位的顺序,设进位变量为carry,初始化为0,先处理s1和s2的公共部分,从低位开始,每次得到的位和为temp,先加上前面的进位carry,然后计算本位进位temp/10,和本位和数temp%10,把它插入到结果字符串的头部之前,即可得到公共部分的和数。
接下来对于s1或者s2多出的部分,单独处理,最后注意,如果处理结束后进位不是0,要进到下一位,具体代码如下:
首先定义用于char和int互转的两个函数:
int charToInt(char c){
    return c - '0';
}
char intToChar(int n){
    return '0' + n;
}
接下来是和的计算代码:
string sumofStr(string _s1, string _s2){
    string s1 = reverseStr(_s1);
    string s2 = reverseStr(_s2);
    int pMax = s1.length() > s2.length() ? s2.length() : s1.length();
    string sumStr = "";
    int p;
    int carry = 0;
    int temp = 0;
    for(p = 0; p < pMax; p++){
        temp = charToInt(s1[p]) + charToInt(s2[p]) + carry;
        carry = temp / 10;
        sumStr.insert(sumStr.begin(),intToChar(temp % 10));
    }
    if(p < s1.length()){
        for(; p < s1.length(); p++){
            temp = charToInt(s1[p]) + carry;
            carry = temp / 10;
            sumStr.insert(sumStr.begin(),intToChar(temp % 10));
        }
    }
    if(p < s2.length()){
        for(; p < s2.length(); p++){
            temp = charToInt(s2[p]) + carry;
            carry = temp / 10;
            sumStr.insert(sumStr.begin(),intToChar(temp % 10));
        }
    }
    if(carry > 0){
        sumStr.insert(sumStr.begin(),intToChar(carry % 10));
        carry /= 10;
    }
    return sumStr;
}												
											使用C++的string实现高精度加法运算的更多相关文章
- HDU 1002 (高精度加法运算)
		
A + B ProblemII Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
 - java算法  蓝桥杯  高精度加法
		
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
 - 【模板】C++高精度加法
		
所谓高精度加法就是对两个和可能会超过long long数据范围的数进行加法运算.这种情况下,显然不能使用常规的方法进行运算. 那么,不妨考虑一下人在纸上是如何进行加法运算的.当人进行加法运算时,通常会 ...
 - 【t079】火星上的加法运算
		
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,想向你求助,作为一名 ...
 - Java实现 蓝桥杯VIP 基础练习 高精度加法
		
java算法 蓝桥杯 高精度加法 问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数 ...
 - NEFU 2016省赛演练一 F题  (高精度加法)
		
Function1 Problem:F Time Limit:1000ms Memory Limit:65535K Description You know that huicpc0838 has b ...
 - vector、string实现大数加法乘法
		
理解 vector 是一个容器,是一个数据集,里边装了很多个元素.与数组最大的不同是 vector 可以动态增长. 用 vector 实现大数运算的关键是,以 string 的方式读入一个大数,然后将 ...
 - 用c++实现高精度加法
		
c++实习高精度加法 最近遇到一个c++实现高精度加法的问题,高精度问题往往十复杂但发现其中的规律后发现并没有那么复杂,这里我实现了一个整数的高精度加法,主要需要注意以下几点: 1:将所需输入的数据以 ...
 - Problem B: 大整数的加法运算
		
Problem B: 大整数的加法运算 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 112 Solved: 57[Submit][Status][W ...
 
随机推荐
- JVM内存模型及分区
			
Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间. JVM内存模型如下图所示: jvm管理的内存区域包括以下几个区域: 栈区: 栈 ...
 - python 的字符串驻留机制
			
我们都知道python中的引用计数机制,相同对象的引用其实都是指向内存中的同一个位置,这个也叫做“python的字符串驻留机制”.其他的就不多说了,自行研究. 重点!!!!!! python的引用计数 ...
 - ubuntu14.04 python2.7 安装配置OpenCV3.0
			
环境:ubuntu14.04 python2.7 内容:安装并配置OpenCV3.0 今天按照OpenCV官网上的步骤装了OpenCV但是,装好之后python提示“No module named ...
 - 如何在joomla上展示word,pdf,xlsx,ppt
			
去年用slideshare,非常好用,只要在joomla上装上插件,就能直接把slideshare上的文件弄到网站上了,但是前几天突然发现slideshare登不进去了,而<embed>下 ...
 - OAuth 2 深入介绍
			
1. 前言 2. OAuth2 角色 2.1 资源所有者(Resource Owner) 2.2 资源/授权服务器(Resource/Authorization Server) 2.3 客户端(Cli ...
 - Java课程设计常见技术问题(程序部署、数据库、JSP)
			
1. 部署方法 Eclipse下打包 右键点击项目-Export-Runnable JAR file,选择正确的Launch configuration,接下来根据提示可以将项目中用到的jar打入包中 ...
 - 自定义view实现阻尼效果的加载动画
			
效果: > 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减 ...
 - 修改hosts立刻生效不必重启
			
有时我们会通过修改Hosts文件(路径为系统盘:\WINDOWS\system32\drivers\etc\hosts),在修改并保存Hosts文件后需要重启才能使设置生效. 这时可以打开命令提示符 ...
 - The new powerful SQL executing schedule monthly or weekly in DB Query Analyzer 7.01
			
1 About DB Query Analyzer DB Query Analyzer is presented by Master Genfeng,Ma from Chinese Mainland. ...
 - android 自定义view之选座功能
			
效果图: 界面比较粗糙,主要看原理. 这个界面主要包括以下几部分 1.座位 2.左边的排数 3.左上方的缩略图 4.缩略图中的红色区域 5.手指移动时跟随移动 6.两个手指缩放时跟随缩放 主要技术点 ...