c++编程练习 018:别叫,这个大整数已经很简化了!
北大程序设计与算法(三)测验题汇总(2020春季)
描述
程序填空,输出指定结果
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int MAX = 110;
class CHugeInt {// 在此处补充你的代码
};
int main()
{ char s[210];int n;while (cin >> s >> n) {CHugeInt a(s);CHugeInt b(n);cout << a + b << endl;cout << n + a << endl;cout << a + n << endl;b += n;cout << ++ b << endl;cout << b++ << endl;cout << b << endl;}return 0;
}
输入
多组数据,每组数据是两个非负整数s和 n。s最多可能200位, n用int能表示
输出
对每组数据,输出6行,内容分别是:
样例输入
99999999999999999999999999888888888888888812345678901234567789 12
6 6
样例输出
99999999999999999999999999888888888888888812345678901234567801
99999999999999999999999999888888888888888812345678901234567801
99999999999999999999999999888888888888888812345678901234567801
25
25
26
12
12
12
13
13
14
来源
Guo Wei
分析
- 构造函数必要的
CHugeInt a(s);
CHugeInt b(n);
+
重载
cout << a + b << endl;
cout << n + a << endl;
cout << a + n << endl;
+=
重载
b += n;
- 前置与后置
++
重载
cout << ++ b << endl;
cout << b++ << endl;
<<
重载
cout << b << endl;
解决方案
class CHugeInt {private:char name[210];
public:void reverse(char *_name){//将数据头尾反转,便于进位处理 int len = strlen(_name);int i = 0,j = len - 1;while(i <= j){swap(_name[i],_name[j]);i += 1;j -= 1;}}/*构造函数的重载*/ CHugeInt(char *_name){//CHugeInt a(s); memset(name,'\0',sizeof(name));strcpy(name,_name);reverse(name);}CHugeInt(int _n){//CHugeInt b(n); memset(name,'\0',sizeof(name));sprintf(name,"%d",_n);//向字符串中写入数据 reverse(name);}/*满足计算:类 + num*/ //cout << a + n << endl;CHugeInt operator+ (int n){return *this + CHugeInt(n);}/*满足计算:类 + 类*/ //cout << a + b << endl; CHugeInt operator+ (const CHugeInt & cur){CHugeInt temp(0);int carry = 0;for(int i = 0;i < 210;i++){char c1 = name[i];char c2 = cur.name[i];if(c1 == 0 && c2 == 0 && carry == 0)break;if( c1 == 0)c1 = '0';if( c2 == 0)c2 = '0';int k = c1 - '0' + c2 - '0' + carry;if(k >= 10){//判断有进位 k = k % 10;temp.name[i] = k + '0';carry = 1;}else{//判断没有进位 carry = 0;temp.name[i] = k + '0';}}return temp;//返回对象 } //cout << n + a << endl; //当声明在类的外部时,则参数列表为2个参数,所以需要声明为友元,便于访问数据h friend CHugeInt operator+ (int n,CHugeInt & h){return h + n;}//cout << b << endl; friend ostream & operator<< (ostream & o,const CHugeInt & h) {int len = strlen(h.name);for(int i = len -1 ; i >= 0; -- i)cout << h.name[i];return o;}/*重载+=运算符*/ //b += n;CHugeInt & operator+= (int n) {* this = * this + n;//n创建临时对象 return * this;}/*重载前置运算符*/ //cout << ++ b << endl; CHugeInt & operator ++() {* this = * this + 1;//1创建临时对象 return * this;}/*重载后置运算符*/ //cout << b++ << endl; CHugeInt operator ++(int) {CHugeInt tmp(*this);* this = tmp + 1;//1创建临时对象 return tmp;}
};
注意:
- 在实现两个数相加时,因为此处是大整数,那么需要用大整数相加的思想,将前后倒置,便于进位处理;
- 因为每一个输出都是对象,那么我们可以将每一个运算符的重载后的返回对象设置为对象,那么最后只需要
<<
重载即可输出数据; - 当声明在类的外部时,则参数列表为2个参数,所以需要声明为友元,便于访问类的对象的数据。
c++编程练习 018:别叫,这个大整数已经很简化了!相关推荐
- 1.6 编程基础之一维数组 11 大整数减法
1.6编程基础之一维数组 11 大整数减法 方法二 http://noi.openjudge.cn/ch0106/11/ 1169:大整数减法 http://ybt.ssoier.cn:8088/p ...
- 1.13 编程基础之综合应用 47 大整数除法方法 python
http://noi.openjudge.cn/ch0113/47/ """ 1.13 编程基础之综合应用 47 大整数除法方法一 http://noi.openjudg ...
- 1.6编程基础之一维数组 10大整数加法
1.6编程基础之一维数组 10大整数加法 OpenJudge - 10:大整数加法 1168:大整数加法 信息学奥赛一本通(C++版)在线评测系统 P1601 A+B Problem(高精) A+B ...
- 编程界称霸全球的10大算法,你到底了解几个呢?
来源:课程图谱博客 本文约2300字,建议阅读9分钟 本文带你了解编程界称霸全球的十大算法. 算法究竟是什么? 简而言之,算法代表经过明确定义的计算过程,用于将输入转化为输出. 可以这样理解,算法是用 ...
- python是什么语言开发的-少儿编程有什么好处?儿童编程课程学习Python的4大原因...
儿童编程Python是什么课程? Python是强制用一种面向对象的解释型计算机程序设计语言,它是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public Li ...
- java 大整数编程_Java编程--RSA算法中的大整数运算
Java编程–RSA算法中的大整数运算 RSA原理浅析 RSA是利用陷门单向函数实现的,其安全基础依赖于大整数的分解问题的难解性 算法过程 为了加深对RSA算法的了解,接下来通过简单的一个例子来分析一 ...
- 程序员面试、算法研究、编程艺术、红黑树4大系列集锦与总结
程序员面试.算法研究.编程艺术.红黑树4大经典原创系列集锦与总结 作者:July--结构之法算法之道blog之博主. 时间:2010年10月-2011年6月. 出处:http://blog.csdn. ...
- 挑战面试编程:大整数的加、减、乘、除
挑战面试编程:大整数的加.减.乘.除 一切都是有限的,哪怕是看起来无限的时间或空间都非常可能是有限的.在计算机中内置类型的加.减.乘.除都是有限的.我们来实现一个"无限"的大整数加 ...
- 拼多多2018校招内推编程-大整数相乘
编程题] 大整数相乘 时间限制:1秒 空间限制:32768K 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示.不能用系统自带的大整数类型. 输入描述: 空格分隔的两个字符串,代表 ...
最新文章
- 使用vue2.0 vue-router vuex 模拟ios7操作
- JavaScript中this指向问题
- linux 监控命令iostat,Linux下 IO实时监控iostat命令详解
- 《深入理解 Spring Cloud 与微服务构建》第十五章 微服务监控 Spring Boot Admin
- Each interface on the back of the fuselage
- 少吃点真的能改变“命运”?
- MediaPlayer对象从停止状态到播放状态调用的方法是prepare()和start()
- Rancher 1.6发布:EBS支持、密文管理和CLI增强
- ubuntu学习日记--Lesson5:系统目录详解
- 工作职位推荐系统的算法与架构
- 密码日记本密码忘记了怎样打开
- php PDO连接mysql
- centos7服务器如何通过trunk模式接入交换机
- js 设计模式(23种)
- 使用ret2reg攻击绕过地址混淆
- 金仓数据库 KingbaseES SQL 语言参考手册 (10. 查询和子查询)
- iOS goback页面刷新问题
- 二叉搜索树的经典应用面试题(keykey-value模式)
- windows server 2008解决 远程桌面多帐号同时登录
- 2020年第二届全国高校计算机能力挑战赛Excel模拟题