1088

本文介绍了一种高效的算法,用于计算任意正整数N的N次方后最左边的数字。通过取对数简化计算,避免了传统方法的超时和内存问题。详细步骤包括取对数、计算幂次的对数部分和使用Math.pow函数确定最左边的数字。

题目:现给你一个正整数N,请问N^N的最左边的数字是什么?

刚看题目,感觉用最原始的办法来解决必然是超时,超内存。而题目只要求求出最左边的数字,所以肯定存在一个比较简单的办法。

上网查了资料后,这题的解决办法让我惊呆了。

分析过程:

设S=N^N,两边取对数:

log S = N*log N

所以S = 10^(N*log N)

而题目求的是最座边的数字

所以只需求10^log N的最左边的数字就行了。

这样运算量会少很多

Java代码:

import java.util.Scanner;

public class Main1088{
   private static Scanner s =new Scanner(System.in) ;
   
   public static void main(String[] args) {
     
	   while(s.hasNext()){
		   long n = s.nextLong() ;
		   long sum =  0 ;
		   double result = n*Math.log10(n) ;
		   sum = (long)result  ;
		   result = result - sum ;
		   String str = Double.toString(Math.pow(10, result)) ;
		   System.out.println(str.charAt(0));
	   }
         
      
      }
   
}

样例输入

3
4

样例输出

2
2

------------------------------------------------------------------------------------------------------------------------------

运行结果:

3
2
4
2

--------------------------------------------------成功,可以AC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值