《数据结构》南昌航空大学实验报告模板
- 格式:doc
- 大小:53.00 KB
- 文档页数:7
南昌航空大学
实
验
报
告
课程名称:数据结构指导老师
准考证号:036811100078
姓名:周文飞
指导老师:廖丽
实验报告内容和步骤
一、实验目的:通过实践加深对数据结构的基本概念、基本理论的理解,培养学生灵活使用所学知识解决实际问题的能力,同时提高程序设计实际操作能力。
二、实验内容:实现任意大的数字(包括任意整数和任意小数)的加法,减法和乘法运算。
三、实验要求:
1、本程序的数据来自文件,第一个操作数存储在“a*.txt”文件中,第二个操作数存储在
“b*.txt”文件中(a*与b*分别表示两组对应的数据),这两组文件中分别存储对应的任意大数,以供程序
2、本程序主要实现3个功能:任意大数的加法运算,任意大数的减法运算和任意大数的乘
法运算。
大数的范围包括:任意长度的整数和任意长度的小数。
四、实验过程
1.BigNumber.java
[c-sharp]view plaincopyprint?
1. /*自定义大数类,用数组实现任意超大整数的加减乘运算*/
2. i mport java.util.Random;
3. p ublic class BigNumber {
4. private int[] num;
5. // 无参构造函数
6. public BigNumber() {
7. }
8. // 有参构造函数
9. public BigNumber(int i) {
10. num = new int[i];
11. Random random = new Random();
12. int j;
13. for (j = 0; j < i; j++)
14. num[j] = random.nextInt(10);
15. // 当生成的数首位是0的话,让重新生成
16. while (num[i - 1] == 0) {
17. num[i - 1] = random.nextInt(10);
18. }
19. }
20. // 加法
21. public static BigNumber add(BigNumber bigA, BigNumber bigB) {
22. int alen = bigA.num.length;
23. int blen = bigB.num.length;
24. int clen = Math.max(alen, blen);
25. BigNumber result = new BigNumber();
26. result.num = new int[clen];
27. if (alen >= blen) {
28. for (int i = 0; i < blen; i++)
29. result.num[i] = bigA.num[i] + bigB.num[i];
30. for (int j = blen; j < alen; j++)
31. result.num[j] = bigA.num[j];
32. } else {
33. for (int i = 0; i < alen; i++)
34. result.num[i] = bigA.num[i] + bigB.num[i];
35. for (int j = alen; j < blen; j++)
36. result.num[j] = bigB.num[j];
37. }
38. for (int k = 0; k < clen - 1; k++) {
39. if (result.num[k] >= 10) {
40. result.num[k] -= 10;
41. result.num[k + 1]++;
42. }
43. }
44. return result;
45. }
46. // 减法
47. public static BigNumber subtract(BigNumber bigA, BigNumber bigB) {
48. int alen = bigA.num.length;
49. int blen = bigB.num.length;
50. int clen = Math.max(alen, blen);
51. BigNumber result = new BigNumber();
52. result.num = new int[clen];
53. if (alen > blen) {
54. for (int i = 0; i < blen; i++)
55. result.num[i] = bigA.num[i] - bigB.num[i];
56. for (int j = blen; j < alen; j++)
57. result.num[j] = bigA.num[j];
58. } else if (alen < blen) {
59. for (int i = 0; i < alen; i++)
60. result.num[i] = bigB.num[i] - bigA.num[i];
62. result.num[j] = bigB.num[j];
63. } else {
64. if (isBigger(bigA, bigB)) {
65. for (int i = 0; i < clen; i++) {
66. result.num[i] = bigA.num[i] - bigB.num[i];
67. }
68. } else {
69. for (int i = 0; i < clen; i++) {
70. result.num[i] = bigB.num[i] - bigA.num[i];
71. }
72. }
73. }
74. for (int k = 0; k < clen - 1; k++) {
75. if (result.num[k] < 0) {
76. result.num[k] += 10;
77. result.num[k + 1]--;
78. }
79. }
80. return result;
81. }
82. // 乘法
83. public static BigNumber multiply(BigNumber bigA, BigNumber bigB) {
84. int alen = bigA.num.length;
85. int blen = bigB.num.length;
86. int clen = alen + blen;
87. int t;
88. BigNumber result = new BigNumber();
89. result.num = new int[clen];
90. for (int i = 0; i < alen; i++) {
91. BigNumber temp = new BigNumber();
92. temp.num = new int[clen];
93. for (int j = 0; j < blen; j++) {
94. temp.num[i + j] = bigA.num[i] * bigB.num[j];
95. }
97. if (temp.num[k] >= 10) {
98. t = temp.num[k];
99. temp.num[k] = t % 10;
100. temp.num[k + 1] += t / 10;
101. }
102. }
103. result = add(result, temp);
104. }
105. return result;
106. }
107. // 判断两个位数相同的BigNumber那个大,前面的大于或者等于返回true,后面的大返回false
108. public static boolean isBigger(BigNumber bigA, BigNumber bigB) { 109. boolean flag = true;
110. for (int i = bigA.num.length - 1; i >= 0; i--) {
111. if (bigA.num[i] < bigB.num[i]) {
112. flag = false;
113. break;
114. }else if(bigA.num[i] > bigB.num[i]){
115. break;
116. }else
117. continue;
118. }
119.
120. return flag;
121. }
122. // 打印
123. public void print() {
124. if (num[num.length - 1] != 0)
125. System.out.print(num[num.length - 1]);
126. for (int i = num.length - 2; i >= 0; i--)
127. System.out.print(num[i]);
128. System.out.println();
129. }
130. public static void main(String[] args) { 131. // TODO Auto-generated method stub 132. BigNumber a = new BigNumber(1000); 133. System.out.println("第一个数是:"); 134. a.print();
135. BigNumber b = new BigNumber(900); 136. System.out.println("第二个数是:"); 137. b.print();
138. System.out.println("它们的和为:"); 139. add(a, b).print();
140. System.out.println("它们的差为:"); 141. subtract(a, b).print();
142. System.out.println("它们的乘积为:"); 143. multiply(a, b).print();
144. }
145. }。