• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 使用C++的string实现高精度加法运算的实例代码

使用C++的string实现高精度加法运算的实例代码

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了高精度加法c++,高精度加法,c语言高精度加法,高精度加法pascal,蓝桥杯高精度加法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

对于超大数字的运算,用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; 
 
} 
</div>

原理很简单,只需要取出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; 
} 
</div>

接下来是和的计算代码:

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; 
 
} 
</div>

以上就是小编为大家带来的使用C++的string实现高精度加法运算的实例代码的全部内容了,希望对大家有所帮助,多多支持~

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++中实现矩阵的加法和乘法实例
  • 使用C++的string实现高精度加法运算的实例代码

相关文章

  • 2017-05-28C 语言基础教程(我的C之旅开始了)[四]
  • 2017-05-28C语言数据结构 链表与归并排序实例详解
  • 2017-05-28复数乘法中的结构体赋值实现代码
  • 2017-05-28C语言数组指针的小例子
  • 2017-05-28给ActiveX签名的实现方法详解
  • 2017-05-28C++ Template应用详解
  • 2017-05-28C++编程异常处理中try和throw以及catch语句的用法
  • 2017-05-28C语言的Struct Hack笔记
  • 2017-05-28C++设计模式之抽象工厂模式
  • 2017-05-28二分法求多项式在-10 10间值的实现代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C与C++中结构体的区别
    • C/C++指针和取地址的方法
    • 关于C++中构造函数初始化成员列表的总结
    • 8皇后问题的解法实例代码
    • 纯C语言:检索与周游广度深度遍历源码分享
    • C++编写DLL动态链接库的步骤与实现方法
    • 函数式宏定义与普通函数的区别
    • C++中的函数指针与函数对象的总结
    • C语言关系运算符实例详解
    • C++中 map的基本操作

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有