北大程序设计与算法(三)测验题汇总(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


分析

  1. 构造函数必要的
CHugeInt a(s);
CHugeInt b(n);
  1. +重载
cout << a + b << endl;
cout << n + a << endl;
cout << a + n << endl;
  1. +=重载
b += n;
  1. 前置与后置++重载
cout  << ++ b << endl;
cout << b++ << endl;
  1. <<重载
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;}
};

注意:

  1. 在实现两个数相加时,因为此处是大整数,那么需要用大整数相加的思想,将前后倒置,便于进位处理;
  2. 因为每一个输出都是对象,那么我们可以将每一个运算符的重载后的返回对象设置为对象,那么最后只需要<<重载即可输出数据;
  3. 当声明在类的外部时,则参数列表为2个参数,所以需要声明为友元,便于访问类的对象的数据。

c++编程练习 018:别叫,这个大整数已经很简化了!相关推荐

  1. 1.6 编程基础之一维数组 11 大整数减法

    1.6编程基础之一维数组 11 大整数减法 方法二  http://noi.openjudge.cn/ch0106/11/ 1169:大整数减法 http://ybt.ssoier.cn:8088/p ...

  2. 1.13 编程基础之综合应用 47 大整数除法方法 python

    http://noi.openjudge.cn/ch0113/47/ """ 1.13 编程基础之综合应用 47 大整数除法方法一 http://noi.openjudg ...

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

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

  4. 编程界称霸全球的10大算法,你到底了解几个呢?

    来源:课程图谱博客 本文约2300字,建议阅读9分钟 本文带你了解编程界称霸全球的十大算法. 算法究竟是什么? 简而言之,算法代表经过明确定义的计算过程,用于将输入转化为输出. 可以这样理解,算法是用 ...

  5. python是什么语言开发的-少儿编程有什么好处?儿童编程课程学习Python的4大原因...

    儿童编程Python是什么课程? Python是强制用一种面向对象的解释型计算机程序设计语言,它是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public Li ...

  6. java 大整数编程_Java编程--RSA算法中的大整数运算

    Java编程–RSA算法中的大整数运算 RSA原理浅析 RSA是利用陷门单向函数实现的,其安全基础依赖于大整数的分解问题的难解性 算法过程 为了加深对RSA算法的了解,接下来通过简单的一个例子来分析一 ...

  7. 程序员面试、算法研究、编程艺术、红黑树4大系列集锦与总结

    程序员面试.算法研究.编程艺术.红黑树4大经典原创系列集锦与总结 作者:July--结构之法算法之道blog之博主. 时间:2010年10月-2011年6月. 出处:http://blog.csdn. ...

  8. 挑战面试编程:大整数的加、减、乘、除

    挑战面试编程:大整数的加.减.乘.除 一切都是有限的,哪怕是看起来无限的时间或空间都非常可能是有限的.在计算机中内置类型的加.减.乘.除都是有限的.我们来实现一个"无限"的大整数加 ...

  9. 拼多多2018校招内推编程-大整数相乘

    编程题] 大整数相乘 时间限制:1秒 空间限制:32768K 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示.不能用系统自带的大整数类型. 输入描述: 空格分隔的两个字符串,代表 ...

最新文章

  1. 使用vue2.0 vue-router vuex 模拟ios7操作
  2. JavaScript中this指向问题
  3. linux 监控命令iostat,Linux下 IO实时监控iostat命令详解
  4. 《深入理解 Spring Cloud 与微服务构建》第十五章 微服务监控 Spring Boot Admin
  5. Each interface on the back of the fuselage
  6. 少吃点真的能改变“命运”?
  7. MediaPlayer对象从停止状态到播放状态调用的方法是prepare()和start()
  8. Rancher 1.6发布:EBS支持、密文管理和CLI增强
  9. ubuntu学习日记--Lesson5:系统目录详解
  10. 工作职位推荐系统的算法与架构
  11. 密码日记本密码忘记了怎样打开
  12. php PDO连接mysql
  13. centos7服务器如何通过trunk模式接入交换机
  14. js 设计模式(23种)
  15. 使用ret2reg攻击绕过地址混淆
  16. 金仓数据库 KingbaseES SQL 语言参考手册 (10. 查询和子查询)
  17. iOS goback页面刷新问题
  18. 二叉搜索树的经典应用面试题(keykey-value模式)
  19. windows server 2008解决 远程桌面多帐号同时登录
  20. 2020年第二届全国高校计算机能力挑战赛Excel模拟题

热门文章

  1. Android Drawable使用指南
  2. JVM规范阅读:徒手解析class文件
  3. 服装店3天锁定1000多会员,净赚60万,让客户疯狂的成交!
  4. 英语学习之路(一)学英语容易放弃的原因
  5. 社交电商再次升温, 无忧猴正掀起第三次零售革命
  6. 08、Python函数的返回值
  7. Jmeter性能测试3——JMETER-脚本优化
  8. 动态数组_栈的应用之十进制与十六进制的转换
  9. DensePose学习笔记
  10. 如何实现相机内存卡数据恢复