参加MOOC PKU的程序设计专项课程学习,目前进度到C++。这门课太烂了,完全就是自学,作业还相当难!!!!比如这里week4的这题,其实是把poj上的大整数的加、减、乘、除合并到一题里面,这个代码量很恐怖。当然了,通过查找相关资料,终于学习了,如何实现大整数的高精度四则运算,这也是程序员面试的一道经典题。其实具体的思路就是小学竖式计算,但是代码实现的过程,比较抽象。先说说大整数加法。

0、编写大整数类结构

使用数组存储所有操作数,定义数组大小200。定义一个全局变量,存运算符,因为减法运算中有可能需要输出负号。定义一个布尔变量,用于区分减法的三种情况。

#include <iostream>
#include<cstring>
#include<cstdlib>
#define MAX_LEN 200
char o;                              /*全局运算符*/
bool cannotSub=0;                    /*不够减标记,区分减法的情况*/
char szLine1[MAX_LEN+10]={0};         /*输入输出的字符数组*/
char szLine2[MAX_LEN+10]={0};

成员变量2个。一个是数组的首地址,用整型指针。另一个是存储数组的大小,用int型。
成员函数包括构造函数、赋值号重载函数以及四则运算符号的重载函数和一个倍增函数(用于将数扩大为原来的10n倍)。

class  bigNum{public:bigNum():sInt(NULL){ len=0; }    /*构造函数*/~bigNum(){ if(sInt)    delete[] sInt; }/*析构函数*/const int * getint(){ return sInt; }  /*返回数组首地址*/bigNum & operator= (char *s);       /*赋值号重载函数*/bigNum & operator= (bigNum & b);    /*实现深复制,即指向内容之间的复制*/friend void operator+ (bigNum & result,bigNum & b);/*加号重载*/friend void operator- (bigNum & result,bigNum & b);/*减号重载*/friend void operator* (bigNum & result,bigNum & b);/*乘号重载*/friend void operator/ (bigNum & result,bigNum & b);/*除号重载*/friend void multi10 (bigNum & b,int n);/*倍增函数*/ private:int *sInt;            /*实际进行四则运算的整型数*/int len;              /*数组长度*/};

赋值号重载函数的作用,

  • 1、是实现主函数中字符串存储为整型数组,因为用主函数中定义了char型数组cin输入的是ASCII码,需要减去’0’的ASCII码再存储为整型数组。输入用字符数组,因为有一些函数可以直接使用,如求字符串长度等等。
  • 2、是实现对象之间的深复制,也就是对象所指向内容之间的拷贝。
  • 3、是实现动态分配数组的存储空间。

一、大整数加法

1、思路

大整数加法的思路,就是竖式计算,逐项相加。考虑进位,就是逢十进一,也就是说如果某一位大于等于10,减去10就是本位和,然后下一位++,这就是进位。加法最多就是进1位

2种情况.不进位加法:

 1234+43215555

进位加法

 999+888887

2、 算法

运用数组存储两个加数,右对齐逐位相加,如果和大于或等于10,和减10,同时下一位被加数++。

/*加号重载,实现result+b*/void operator+ (bigNum & result,bigNum & b){for( int i = 0;i < MAX_LEN+10 ; i ++ ){result.sInt[i] += b.sInt[i]; //逐位相加if( result.sInt[i] >= 10 ){ //看是否要进位result.sInt[i] -= 10; //本位和result.sInt[i+1] ++; //下一位进位}}}

大整数加法计算思路与算法实现相关推荐

  1. 大整数加法基本思路和代码(C++实现)

    大整数加法基本思路和代码(C++实现) 前言 分析 编程 前言 如果给出两个很大很大的整数,这两个数大到long类型也装不下,比如100位整数,如何求它们的和呢? Java中有无敌的BigIntege ...

  2. openjudge 1.6.10 大整数加法

    OpenJudge - 10:大整数加法 解题思路: 1.大整数加法,对应的是高精度加法算法,利用数组模拟来解决 2.首先,明确long long范围都放不下的整数,我们应该想到用数组的方法,如果采取 ...

  3. 大整数加法(简单算法)

    大整数加法首先要了解加法的算法,具体思路很简单: 从低位到高位开始加,需要进位,正向数组是高位在前,所以需要反向数组开始加法. 代码如下,写的麻烦了一点: #include<stdio.h> ...

  4. javascript乘法和加法_js 大整数加法、乘法、除法

    有一定的编程经验的人都知道,当我们对数据操作的时候,若数据过大,计算机将这个大数从十进制的转为二进制的,是没有那个类型的放的了的,因此,我们经常将一个大数转化为字符串来操作.接下来我将演示大整数的加法 ...

  5. 1.6编程基础之一维数组 10大整数加法

    1.6编程基础之一维数组 10大整数加法 OpenJudge - 10:大整数加法 1168:大整数加法 信息学奥赛一本通(C++版)在线评测系统 P1601 A+B Problem(高精) A+B ...

  6. 信息学奥赛一本通(1168:大整数加法)

    1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 44610     通过数: 14295 [题目描述] 求两个不超过200位的非负整数的和. ...

  7. 信息学奥赛一本通(c++):1168:大整数加法

    一.题目 1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 求两个不超过200位的非负整数的和. [输入] 有两行,每行是一个不超过200位 ...

  8. 剑指offer第12题打印从1到n位数以及大整数加法乘法

    字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后一位字 ...

  9. 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法

    [题目链接] ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 [题目考点] 1. 高精度 考察:高精加高精 高精度计算讲解 [解题思路] 注意:输入可能有多余的前导 ...

最新文章

  1. 《AI系统周刊》第5期:Cerebras发布可运行120万亿参数AI模型的CS-2芯片
  2. 集成学习算法总结----Boosting和Bagging
  3. Beautifulsoup 网页表格的解析
  4. snapchat注册不到_从Snapchat获得开发人员职位中学到的经验教训
  5. 图像处理之积分图应用二(快速边缘保留滤波算法)
  6. NBU对oracle数据库进行rman备份
  7. 游族辟谣公司内斗CEO被投毒住院,警方通报带来光速反转?
  8. 进入32位保护模式之路
  9. NekoHtml 乱码出现问号的解决
  10. 2016年统计用区划代码和城乡划分代码(截止2016年07月31日) 省市县镇+url
  11. 王之泰201771010131《面向对象程序设计(java)》第四周学习总结
  12. java 接口 实验报告_java-接口练习实验报告
  13. docker单独挂盘步骤
  14. 这100 个网络基础知识 看完成半个网络高手
  15. YV12,I420,YUV420P的区别与格式转换
  16. RecyclerView嵌套实现购物车
  17. 中学化学教学参考杂志社中学化学教学参考编辑部2022年第15期目录
  18. 每个人的青春都有一条弯路,你要自己走
  19. 使用Microsoft-Authenticator做系统登录的二次验证
  20. #1716 : 继承顺位(dfs)

热门文章

  1. 微信公众号开发第六课 BAE结合实现迅雷账号随机分享
  2. mongodb安装失败看这里
  3. No MyBatis mapper was found,Error creating bean with name 'xSqlSessionFactory' defined in class path
  4. OfficeExcel(6)
  5. 牧牛商学院,区块链和大数据的融合
  6. 细说Greenplum时空数据分析
  7. css动画 和 js动画_CSS大师的动画建议
  8. linux如何运行windows游戏,Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
  9. 杭电ACM——蝎子搬新家(贪心)
  10. 采用模块化建模方法,搭建空气悬架模型,UKF状态估计模型,可实现悬架动挠度等状态估计