BigIntger

又是今天的面试题,上级操作,linux环境文本编辑器下写代码;

题目大概就是说:给一个数,先求出这个数的阶层。在这个阶层的基础上把各个位相加比如:阶层结果=56

相加 5+6=11;要求给出的是输入100  输出相加的结果;

import java.math.BigInteger;
/*
 * 求一个数的阶层,得到的数字每个位相加,输出最终相加的数字;
 */
public class NumberCount {
	public static void main(String[] args) {
		NumberCount cu = new NumberCount();
		long star1 = System.currentTimeMillis();
		int ree = cu.count(new BigInteger(1000+""));
		System.out.println("ree"+ree+"用时:"+(System.currentTimeMillis()-star1));
		long star2 = System.currentTimeMillis();
		BigInteger amount = cu.Calculate(BigInteger.valueOf(1000));
		System.out.println(amount);
		int [] a = new int[500];
		int real  =0;
		int result =cu.countInt(amount, 0, a,real);
		System.out.println();
		System.out.println(result+"用时:"+(System.currentTimeMillis()-star2));
	}
	private BigInteger Calculate(BigInteger num) {
		//System.out.println(num);
		if(num.intValue() ==1) {
			return BigInteger.ONE;
		}
		if(num.intValue() > 1) {
			return num.multiply(Calculate(BigInteger.valueOf((num.subtract(BigInteger.valueOf(1))).longValue())));
		}
		return BigInteger.ONE;
	}
	public int count(BigInteger c) {
		BigInteger re = Calculate(c);
		System.out.println(re);
		String str = re.toString();
		char[] ch = str.toCharArray();
		int result = 0;
		for(int i=0; i<ch.length; i++) {
			result += Integer.parseInt(ch[i]+"");
		}
		return result;
	}
	/**
	 * 求模的方式,效率似乎没字符串方式高
	 * @param num
	 * @param index
	 * @param a
	 * @return
	 */
	public int countInt(BigInteger num,int index,int[] a,int result) {
		//int leg = index+1;
		//if(leg==a.length) {
			//数组自动加长
		//	a = Arrays.copyOf(a, leg+10);
		//}
		//求模,得到个位数
		BigInteger bit = num.mod(BigInteger.valueOf(10));
		//把个位数放入数组
		//a[index]= bit.intValue();
		//把个位数直接跟结果相加
		result +=bit.intValue();
		BigInteger newpNum = num.subtract(bit);
		//除去个位
		BigInteger newNum = newpNum.divide(BigInteger.valueOf(10));
		if(newNum.compareTo(BigInteger.valueOf(10))<0) {
			//a[++index] = newNum.intValue();
			result +=newNum.intValue();
			return result;
		}
		return countInt(newNum,index+1,a,result);
	}
}



一开始并不会知道用BigIntger,对这个类也不熟悉;
public class BigInteger extends Number implements Comparable<BigInteger> {


转载于:https://my.oschina.net/u/782865/blog/147413

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值