100亿的计算器

news/2024/12/22 19:44:36/

首先要明白这道题目的考查点是什么,

一是大家首先要对计算机原理的底层细节要清楚、要知道加减法的位运算原理和知道计算机中的算术运算会发生越界的情况,

二是要具备一定的面向对象的设计思想。
首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以byte 类型的整数为例,它用1个字节进行存储,表示的最大数值范围为-128到+127。-1在内存中对应的二进制数据为11111111,如果两个-1相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,11111110,由于进位后超过了byte 类型的存储空间,所以进位部分被舍弃,即最终的结果为11111110,也就是-2,这正好利用溢位的方式实现了负数的运算。-128 在内存
中对应的二进制数据为10000000,如果两个-128相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,00000000,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为00000000,也就是0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于Java中涉及表达式运算时的类型自动提升,我们无法用byte类型来做演示这种问题和现象的实验,

大家可以用下面一个使用整数做实验的例子程序体验一下:
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
int sum = a + b;
System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);
先不考虑long类型,由于int的正数范围为2的31次方,表示的最大数值约等于2*1000*1000*1000,
也就是20亿的大小,

所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:
()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数
()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中
()提供加减乘除的功能

[java]  view plain copy print ?
  1. public class BigInteger //表示很大的整数   
  2.  
  3.     int sign;   //标识符号   
  4.     byte[] val; //用字节数组表示数值的二进制数   
  5.   
  6.     //构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中   
  7.     public Biginteger(String val)   
  8.      
  9.     sign  
  10.     val  
  11.      
  12.   
  13.     //+-*%方法   
  14.     public BigInteger add(BigInteger other){}    
  15.     public BigInteger subtract(BigInteger other){}  
  16.     public BigInteger multiply(BigInteger other){}  
  17.     public BigInteger divide(BigInteger other){}  
  18.  


 

 

备注:要想写出这个类的完整代码,是非常复杂的,如果有兴趣的话,可以参看jdk 中自带的
java.math.BigInteger 类的源码。面试的人也知道谁都不可能在短时间内写出这个类的完整代码的,他要的
是你是否有这方面的概念和意识,他最重要的还是考查你的能力,所以,你不要因为自己无法写出完整的
最终结果就放弃答这道题,你要做的就是你比别人写得多,证明你比别人强,你有这方面的思想意识就可
以了,毕竟别人可能连题目的意思都看不懂,什么都没写,你要敢于答这道题,即使只答了一部分,那也
与那些什么都不懂的人区别出来,拉开了距离,算是矮子中的高个,机会当然就属于你了。另外,答案中
的框架代码也很重要,体现了一些面向对象设计的功底,特别是其中的方法命名很专业,用的英文单词很
精准,这也是能力、经验、专业性、英语水平等多个方面的体现,会给人留下很好的印象。


http://www.ppmy.cn/news/323790.html

相关文章

谁的数据在说谎:天翼云71亿、浪潮云估值100亿、金山云亏了27亿?

本文作者:吴玉征 排版:圈儿 之前画了一个 长图云计算100年,对云计算行业进行了调侃; 也写文章 2020中国云厂商预测:华为云、UCloud、青云、百度云、金山云等,谁是第三很重要?评论说怎么不说国字…

淘宝网站容纳90秒100亿的数据量

作者:huashiou 链接:https://segmentfault.com/a/1190000018626163 1、概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演…

dubbo源码阅读之-java spi, dubbo spi 和 Spring spi 到底有啥区别

java spi, dubbo spi 和 Spring spi 到底有啥区别 SPIJava SPI案例优缺点 Spring SPIDubbo SPI概述案例源码分析 自己实现一个SPI SPI SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由…

90秒100亿的背后,阿里巴巴到底做了什么?

答案是-----全链路压测 本文来自「阿里云云栖社区」 https://zhuanlan.zhihu.com/p/28458624 摘要: 阿里巴巴双11备战期间,保障系统稳定性最大的难题在于容量规划,而容量规划最大的难题在于准确评估从用户登录到完成购买的整个链条中&#xf…

李佳琦一晚卖了100亿,有位“硬汉”在背后默默发力

金磊 发自 凹非寺量子位 报道 | 公众号 QbitAI “美眉,来喽,来喽,上链接!” 话音刚落。 “没了,全没了,都被抢光喽!” 头部主播李佳琦,一夜100亿元销售额这件事,着实震惊…

10年100亿!“新基石研究员”项目正式发布

来源: 中国科学报 文:《中国科学报》记者 赵广立 4月30日,《中国科学报》获悉,一项总投入达100亿元、面向基础研究领域的社会资助项目——“新基石研究员项目”正式发布。 在国家有关部门的指导下,“新基石研究员项目”…

100亿个数中寻找中位数

题目: 在一个大文件中有100亿个32位整数,乱序排列,要求找出中位数;内存限制为512M;请写出算法设计思路; 基本分析: (1)中位数的定义:一个给定排序好的序列&…

从1亿个数里面找出前100个最大的

从1亿个数里面找出前100个最大的 这个题目应该是一些大公司面试题中经常被问到的,这里我给出一种做法,至于面试官满不满意我就不知道了。我们知道,这种找出前多少个最大或者最小的最适合用堆排序(对堆排序不熟悉的读者可以参考为的这篇博客&…