`
sgl124764903
  • 浏览: 174634 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
社区版块
存档分类
最新评论

请设计一个一百亿的计算器

阅读更多

首先要明白这道题目的考查点是什么,一是大家首先要对计算机原理的底层细节要清楚、要知道加减法的位运算原理和知道计算机中的算术运算会发生越界的情况,二是要具备一定的面向对象的设计思想。

首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以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的正数范围为231次方,表示的最大数值约等于2*1000*1000*1000,也就是20亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:

()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数

()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中

()提供加减乘除的功能

public class BigInteger

{

           int sign;

           byte[] val;

           public Biginteger(String val)

           {

                    sign = ;

                    val = ;

           }

           public BigInteger add(BigInteger other)

           {

                   

           }

           public BigInteger subtract(BigInteger other)

           {

                   

           }

           public BigInteger multiply(BigInteger other)

           {

                   

           }

           public BigInteger divide(BigInteger other)

           {

                   

           }

 

}

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

分享到:
评论

相关推荐

    四年级数学上册 计算器练习习题 冀教版 试题.doc

    10个十万是一百万,10个一百万是一千万,这展示了数字进制的关系。此外,数位的理解在3.2题中得以体现,例如3 003 003的最高位是百万位,右边的“3”代表3个一,中间的“3”代表3个一千,左边的“3”代表3个百万。 ...

    JAVA面试题库大全.zip

    一. Java基础部分 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2、Java有没有goto? 3、说说&和&&的区别。 4、在JAVA中如何跳出当前的多重...9、请设计一个一百亿的计算器 。。。。。

    Java面试宝典2014版

    一. Java基础部分 1、一个".java"源文件中是否可以包括多个类...9、请设计一个一百亿的计算器 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11、"=="和equals方法究竟有什么区别?

    0-9 数字wav文件 语音

    例如,它们可以用于构建一个能口头报时的数字时钟,或者在学习环境中帮助学生更好地理解和记忆数字。 6. **音频处理**:这些音频文件可以通过音频编辑软件进行剪辑、混合、淡入淡出等处理,以适应不同应用场景的...

    Java面试宝典

    9、请设计一个一百亿的计算器 9 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、静态变量和实例变量的区别? 12 13、是否可以从一个...

    java面试宝典

    9、请设计一个一百亿的计算器 5 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 6 11、"=="和equals方法究竟有什么区别? 6 12、静态变量和实例变量的区别? 6 13、是否可以从一个static...

    Java面试问题集167页.pdf

    9. 请设计一个一百亿的计算器。 可以使用 BigInteger 类来设计一个一百亿的计算器,BigInteger 类可以处理任意精度的整数运算。 10. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? ...

    java面试题,常见题

    9. 请设计一个一百亿的计算器。 实际上这个问题可能是一个笔误,应该是询问如何设计一个计算器来计算一百亿乘以一个数。如果计算超过int或long的最大值,可以使用BigInteger类。 10. 使用final关键字修饰一个变量...

    java面试总结

    9、请设计一个一百亿的计算器 9 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、静态变量和实例变量的区别? 12 13、是否可以从一个...

    四年级(上册)大数的认识教学设计与思维导图.doc

    例如,知道10个一是十,10个十是一百,以此类推,直至亿。 2. **数位顺序表**:学生需要掌握数位顺序表,了解个位、十位、百位、千位、万位、十万位、百万位、千万位和亿位等数位,以及如何根据数级正确地读写大数...

    Java100例常见面试(笔试) 题库.pdf

    设计一个能够处理一百亿数值的计算器时,需要考虑Java中整数类型的限制。Java的int类型是32位,其最大值为2,147,483,647,不足以表示一百亿。因此,需要使用long类型,它是64位,可以表示-9,223,372,036,854,775,808...

    面试宝典沃尔沃微软

    9. 请设计一个一百亿的计算器 可以使用 BigInteger 类来设计一个一百亿的计算器。 10. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 使用 final 关键字修饰一个变量时,表示该变量的...

    java笔试题汇总版 java笔试题汇总版

    9. 请设计一个一百亿的计算器。 可以使用BigInteger类来设计一个一百亿的计算器,例如: ```java BigInteger num = new BigInteger("1000000000"); ``` 10. 使用 final 关键字修饰一个变量时,是引用不能变,还是...

    java面试题pdf版本

    9. 设计一个一百亿的计算器需要使用 BigInteger 类,因为 int 类型不能存贮那么大的数字。 设计一个一百亿的计算器需要使用 BigInteger 类,因为 int 类型不能存贮那么大的数字。BigInteger 类可以存贮任意大小的...

    较好的java面试题275

    10. **请设计一个一百亿的计算器** 要设计一个能处理一百亿数值的计算器,需要注意数据类型的选择,使用 long 或 BigInteger 类型可以存储这种大整数。同时,需要考虑溢出问题和大数运算的算法实现。 11. **使用 ...

    Java面试题

    10. **请设计一个一百亿的计算器** - 设计这样的计算器需要考虑大整数运算,可以使用`BigInteger`类来处理超过int或long范围的数值。 11. **使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?...

    java知识点

    9. **请设计一个一百亿的计算器** 设计一个处理大数值的计算器涉及到使用`BigInteger`类,这个类提供了处理任意精度整数的能力,非常适合处理像一百亿这样的大数字的运算。 10. **使用final关键字修饰一个变量时,...

    Java基础知识(笔试面试必备)

    Java基础知识(笔试面试必备) 包括如何跳出当前的多重嵌套循环、设计一个一百亿的计算器、"=="和equals方法究竟有什么区别、静态变量和实例变量的区别、abstract class和interface有什么区别等等 备注:里面的序号...

    Java就业面试题大全.doc

    设计一个能够处理极大数值(如一百亿)的计算器,需要考虑以下几个方面: - **大数处理**:利用Java中的`BigInteger`类,它可以处理任意大小的整数。 - **性能优化**:采用高效的算法和数据结构,如Karatsuba乘法...

Global site tag (gtag.js) - Google Analytics