hi

这是使用类和对象的高精度计算封装实现,这能够进行面向对象的高精度计算编程。

#include<iostream>
#include<cstring>
using namespace std;class BIGINT{public:int num[505];int length;bool positive;BIGINT(string str=""){memset(num, 0, sizeof(num));positive = true;if(str == ""){return;}else{length = str.length();for(int i = 0; i<str.length(); i++){num[i] = str[str.length()-i-1]-'0';}}}void show(){if(positive == false){cout<<"-";}for(int i = length-1; i>=0; i--){cout<<num[i];}}
};int compare(BIGINT &a,BIGINT &b){if(a.length > b.length){return 1;}else if(a.length < b.length){return -1;}else{int maxlen = max(a.length,b.length);for(int i = maxlen-1; i>=0; i--){if(a.num[i] > b.num[i]){return 1;}else if(a.num[i] < b.num[i]){return -1;}}return 0;}
}BIGINT bigadd(BIGINT &a,BIGINT &b){BIGINT c;int maxlen = max(a.length,b.length);//相加for(int i = 0;i<maxlen;i++){c.num[i] = a.num[i] + b.num[i];}//进位for(int i = 0;i<maxlen;i++){if(c.num[i]>=10){c.num[i+1] += 1;c.num[i] = c.num[i] % 10;}}//去零if(c.num[maxlen] == 0){c.length = maxlen;}else{c.length = maxlen + 1;}return c;
}BIGINT bigminus(BIGINT &a,BIGINT &b){BIGINT c;int maxlen = max(a.length,b.length);//判断int maxint = compare(a,b);if(maxint == 1){//相减for(int i = 0;i<a.length;i++){if(a.num[i]>=b.num[i]){c.num[i] = a.num[i] - b.num[i];}else{a.num[i+1] -= 1;a.num[i] += 10;c.num[i] = a.num[i] - b.num[i];}}}else if(maxint == -1){c = bigminus(b,a);c.positive = false;}//去零for(int i = maxlen+1;i>=0;i--){if(c.num[i] != 0){c.length = i+1;return c;}}c.length = 1;return c;
}BIGINT bigmultiply(BIGINT &a,BIGINT &b){BIGINT c;//相乘for(int i = 0;i<a.length;i++){ for(int j = 0;j<b.length;j++){   c.num[i+j] += a.num[i]*b.num[j];c.num[i+j+1] += c.num[i+j]/10;c.num[i+j] %= 10;}}//预估int len = a.length + b.length;//去零for(int i = len+1;i>=0;i--){if(c.num[i] != 0){c.length = i+1;return c;}}c.length = 1;return c;
}BIGINT bigmultiplywithsmall(BIGINT a,int b){//相乘for(int i = 0;i<a.length;i++){a.num[i] *= b;}//进位for(int i = 0;i<a.length+1;i++){if(a.num[i]>=10){a.num[i+1] += a.num[i] / 10;a.num[i] %= 10;}}//去零if(a.num[a.length] != 0){a.length += 1;}return a;
}int main(){BIGINT a("111111111");BIGINT b("111111111");BIGINT tmp; tmp = bigadd(a,b);cout<<"高精度加法:";tmp.show();cout<<endl; tmp = bigminus(a,b);cout<<"高精度减法:";tmp.show();cout<<endl;tmp = bigmultiply(a,b);cout<<"高精度乘法:";tmp.show();cout<<endl;tmp = bigmultiplywithsmall(a,100);cout<<"高低精乘法:";tmp.show();cout<<endl;
}

转载于:https://www.cnblogs.com/lyj00912/p/11366683.html

基于类和对象的高精度算法封装相关推荐

  1. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

  2. Java面向对象 类、对象、构造方法、封装

    第1章 面向对象基础 1.1 编程思想概述 1.1.1 面向过程思想概述 我们回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现.一步一步去实现,而 ...

  3. 06.面向对象、类、对象、构造方法及封装

    Java面向对象 第1章 第1章 面向对象基础 1.1 编程思想概述 1.1.1 面向过程思想概述 我们回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代 ...

  4. [Java] 类和对象(简介,封装,内存机制,构造方法)

    文章目录 1 面向对象思想 1.1面向对象的思想概述 举例 特点 1.2 类和对象 类 对象 类和对象的关系 1.3 类的定义 1.4 对象的创建以及使用 1.5 对象的内存 1.6 类作为参数 注意 ...

  5. 面向对象-类和对象、构造方法、封装

    目录 面向对象 一.类和对象 1.定义 2.关系 3.类的组成 4.创建对象的格式 5.使用对象成员变量的格式 6.使用对象成员方法的格式 二.对象内存图 1.单个对象内存图 2.两个对象内存图(方法 ...

  6. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第二章:类和对象初步(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter2:类和对象初步 数据结构+算法=程序 $2.1结构化程序设计的不足     结构化程序设计也称面向过程的程序设计,过程是用函数实现的 ...

  7. C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...

  8. 疯狂Python讲义学习笔记(含习题)之 类和对象

    Python支持面向对象的三大特征:封装.继承和多态. 一.类和对象 可以把类当成一种自定义类型,可以使用类来定义变量,也可以使用类来创建对象. (一)定义类 类是某一批对象的抽象,可以把类理解成某种 ...

  9. 什么是类 ? 什么是对象 ? 类和对象有什么关系 ?

    面向对象(Object Oriented,OO). 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用 ...

最新文章

  1. 刘浩(专业打劫三十年)20155307的预备作业02:
  2. Linux学习笔记-动态库的使用
  3. hybird之web动态换肤实现
  4. [摘录]第五部分 经验谈(2)
  5. 如何在旅途中提升 MacBook 电池电量?
  6. BackTrack4安装中文语言包
  7. 人工智能可以产生自主意识吗?
  8. 记录自建ALIDDNS服务域名解析和外网访问
  9. 被称为海淀妈妈四大神器之一的倾听者K3 硬件拆解
  10. 有道换域名,目标中立、客观、包容
  11. 课堂派题库格式转换程序
  12. Google Adsense西联汇款领取方式与流程,亲身实践,供参考
  13. 大于3小于4的整数bleem_六年级数学小升初知识点梳理
  14. Docker实战-部署GPE微服务的监控体系
  15. 计算机网络mac地址作用是什么,mac地址的作用是什么
  16. HTC Vive 手柄
  17. Y400电脑键帽扣下来和安装上去
  18. 梧桐新叶让我怀念父亲
  19. 读取excel,int 数字时间转时间
  20. OneNMP路由器、交换机监控

热门文章

  1. 003 HandlerMapping
  2. 常用Maven插件介绍(下)(转)
  3. Laravel5.5执行 npm run dev时报错,提示cross-env找不到(not found)的解决办法
  4. JavaScript高级程序设计--01
  5. 201452202014520920145309信息安全系统设计基础实验报告(1)
  6. CentOS 恢复 rm -rf * 误删数据(转)
  7. sublime安装AngularJS插件
  8. Swing中的并发-使用SwingWorker线程模式
  9. ICCV2021 workshop 多视角残缺点云的补全与配准
  10. PPDet:减少Anchor-free目标检测中的标签噪声,小目标检测提升明显