用一维数组存储数据

现实中当数值过大时可能无法存储,比如我们需要存储一个很大的数字,超过数据类型所能存储的范围,依此需求,可以用数组来创造存储更大数字的空间来存储数据。

题目:设计一个可容纳40位数的求n!的程序

程序构思:

首先将Data数组中的数据设置为初始值零,再令第一位数值为1,位数也为1,再将每次相乘的乘积存回数组中,并顺序处理每个数组中超过10的数,若数值超过10,则将位数加1,原来的数值除以10,所得的商与前一位数的和存回到前一位数的数组中,再将余数存回到原来位数的数组中,最后再输出每次计算后的结果:

程序清单:

import java.util.Scanner; /* * 程序功能:设计一个可容纳40位数的求n!的程序 */ public class array { public static void main(String[] args) { int Data[] = new int[40];// 存储40位数的整数 int Digit; // 数据位数据量 int i, j, r, k; int N; // 用户输入值 for (i = 1; i < 40; i++) { // 将数组初始为0 Data[i] = 0; } Data[0] = 1; // 设第0位数数组元素为1 Data[1] = 1; Digit = 1; // 设数据位数为1 System.out.print("Enter a number what you want to calculus:"); Scanner in = new Scanner(System.in); // 读取用户欲求的N值 N = in.nextInt(); // N=in.nextInt(); for (i = 1; i < N + 1; i++) { for (j = 1; j < Digit + 1; j++) Data[j] *= i; for (j = 1; j < Digit + 1; j++) { if (Data[j] > 10) { for (r = 1; r < Digit + 1; r++) { if (Data[Digit] > 10) Digit++; // 当数组中的元素值大于10时,则位数加1 Data[r + 1] += Data[r] / 10; Data[r] = Data[r] % 10; } } } System.out.print(i + "!="); for (k = Digit; k > 0; k--) { System.out.print(Data[k]); } System.out.println(); } } }



比如输入35,结果如下:

Enter a number what you want to calculus:35
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
21!=51090942171709440000
22!=1124000727777607680000
23!=25852016738884976640000
24!=620448401733239439360000
25!=15511210043330985984000000
26!=403291461126605635584000000
27!=0888869450418352160768000000
28!=34888344611713860501504000000
29!=011761993739701954543616000000
30!=352859812191058636308480000000
31!=11938654177922817725562880000000
32!=382036933693530167218012160000000
33!=12607218811886495518194401280000000
34!=428645439604140847618609643520000000
35!=15002590386144929666651337523200000000

此程序是根据《数据结构》(Java语言版)中的一个示例写的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值