数组实现int随机数的阶乘(避免大数问题)
面试的一道题目,实现int随机数的阶乘。这道题就是考察你考没考虑大数问题,如何避免它。 我能想到的就是用数组去实现,然后写了一下代码。但是当i的值很大,接近Max_value时的情况还没有考虑到。
直接看代码:mul进行数组每一位的阶乘,carry()用来对数组的每一位进位,pos记录当前的数组有效位置。这道题还是用ArrayList写比较好,免得浪费空间(有空在更新)。
public class BigNumMul {
public static void main(String args[]){
SolutionBigNumMul s=new SolutionBigNumMul();
s.mul(1000);
}
}
class SolutionBigNumMul{
public int res[]=new int[100000];
public void mul(int num){
int pos=1;//当前数组的有效位数+1;
res[0]=1;
for(int i=2;i<=num;i++){
for(int j=0;j<pos;j++){
res[j]=res[j]*i;
}
pos=Carry(res,pos);//把数组从index=0~pos-1,进位,然后更新pos的值。
}
StringBuffer sb=new StringBuffer();//用一个StringBuffer来显示大数
for(int i=pos-1;i>=0;i--){
sb.append(res[i]);
}
System.out.println(sb.toString());
}
public int Carry(int res[],int pos){
int carry=0;int i=0;
for(;i<=pos-1;i++){
res[i]+=carry;
if(res[i]<10){
carry=0;
}else if(res[i]>9&&i<pos-1){
carry=res[i]/10;
res[i]=res[i]%10;
}else{
while(res[i]>9){
carry=res[i]/10;
res[i]=res[i]%10;
i++;
res[i]=carry;
}
}
}
return i;
}
}
数组实现int随机数的阶乘(避免大数问题)的更多相关文章
- 创建一个长度是5的数组,并填充随机数。使用for循环或者while循环,对这个数组实现反转效果
package day01; import java.util.Random; /** * 首先创建一个长度是5的数组,并填充随机数.使用for循环或者while循环,对这个数组实现反转效果 * @a ...
- C#List转字符串,字符串转List,字符数组转Int数组
List转字符串 [C#] 纯文本查看 复制代码 ? 01 02 List<string> List = new List<string>(); string strArray ...
- java 字节数组转int
4字节数组转int类型 小端模式 /** * 数组转int类型 * * @param src * @return */ public static int bytesToInt(byte[] src) ...
- 【转】java中byte数组与int类型的转换(两种方式)----不错
原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...
- C# string数组转int数组(转载)
C# string数组转int数组 用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //字符串数组(源数组) string[] sNums = new[] {"1 ...
- C# string数组转int数组
用法 //字符串数组(源数组) string[] sNums = new[] {"1", "2"}; //整型数组(目标数组) int[] iNums; //转 ...
- byte数组和int之间相互转化的方法
Java中byte数组和int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送者接收的数据都是byte数组,但是int类型是4个byte组成的,如何把一个整形in ...
- 数组转集合、集合转数组、字符串数组与int型、long型数组等的转换
在项目中经常会遇到数组转集合.集合转数组.数组之间类型转换等操作 1.数组转集合 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: String str[] = { ...
- 【转】C# string数组转int数组
//字符串数组(源数组) string[] sNums = new[] {"1", "2"}; //整型数组(目标数组) int[] iNums; //转换方法 ...
随机推荐
- [Leetcode] 01 Matrix
问题: https://leetcode.com/problems/01-matrix/#/description 基本思路:广度优先遍历,根据所有最短距离为N的格找到所有距离为N+1的格,直到所有的 ...
- [源码分析]读写锁ReentrantReadWriteLock
一.简介 读写锁. 读锁之间是共享的. 写锁是独占的. 首先声明一点: 我在分析源码的时候, 把jdk源码复制出来进行中文的注释, 有时还进行编译调试什么的, 为了避免和jdk原生的类混淆, 我在类前 ...
- HttpServletRequest基础
一.请求行 二.请求消息头 三.请求正文(重要) 1.获取表单(request)提交的数据 (1)getParameter(name):根据表单name属性的名字,获取name的值 (2)getPar ...
- use case 的缺陷
用use case 获取需求的方法是否有什么缺陷,还有什么地方需要改进? 1.故事/人物/场景非常适合交互式的系统,但是对于其他类型的需求(算法,速度,扩展性,安全性,以及和 系统技术相关的 ...
- Hyper-V安装虚拟机
1.进入控制面板-程序,选择“启用或关闭Windows功能” 2.找到Hyper-V,勾选,重启电脑,即可 3.若是没有找到Hyper-V,如此操作 1)新建txt文件,输入以下内容: pushd & ...
- 开发一个项目之ES2015+
变量的解构赋值 任何部署了 Iterator 的对象都可 for of 循环(数组.Set.Map.某些类似数组的对象(arguments对象.DOM NodeList 对象).Generator 对 ...
- vscode 前端插件推荐
参考链接:https://segmentfault.com/a/1190000011779959?utm_source=tag-newest#articleHeader48
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 3D Slicer中文教程(六)—调用matlab函数(MatlabBridge使用方法)
1.安装MatlabBridge插件 (1)在工具栏找到Extension,点击进入Extension Manager (2)找到MatlabBridge,安装 2.配置MATLAB环境 (1)在模块 ...
- Python 并发编程
进程 开启进程 from multiprocessing import Process import time def task(name): print('%s is running' %name) ...