8.1数字比较
题目描述:
牛牛很喜欢对数字进行比较,但是对于3 > 2这种非常睿智的比较不感兴趣。上了高中之后,学习了数字的幂,他十分喜欢这种数字表示方法,比如xy。
由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较xy和yx的大小,如果前者大于后者,输出">",小于则输出"<",等于则输出"="。
输入描述:
两个数字x和y。
满足1 <= x,y <= 10^9
输出描述:
一个字符,">","<"或者"="。
示例1
输入:
2 2
输出
=
示例2
输入:
2 4
输出
=
代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[]args){
Scanner input = new Scanner(System.in);
int x=input.nextInt();
int y = input.nextInt();
double a1,a2;
//同时乘log10,可以把次方挪下来,这样数就会比较了
a1=y*Math.log10(x);
a2=x*Math.log10(y);
if(a1>a2)
System.out.println(">");
else if(a1==a2)
System.out.println("=");
else if(a1<a2)
System.out.println("<");
}
}
核心思想是由于10的9次方过大,所以要把x^y>y^x次方的比较更改为ylogx>xlogy的问题,即可使计算机可以存储下数值。
9.1童年生活二三事
题目描述
NowCoder小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。
但年幼的他一次只能走上一阶或者一下子蹦上两阶。
现在一共有N阶台阶,请你计算一下NowCoder从第0阶到第N阶共有几种走法。
输入描述
输入包括多组数据。每组数据包括一个整数n, (1≤n≤90)。
输出描述
对应每个输入包括一个输出。
为redraiment到达第n阶不同走法的数量。
示例1
输入
1
2
输出
1
2
先贴出代码
// write your code here
import java.util.Scanner;
// 使用斐波那契数列
//根据规律可以找到F(1)=1,F(2)=2
// F(3)=3,F(4)=5
public class Main{
public static void main(String[]args){
Scanner input = new Scanner(System.in);
while(input.hasNextInt())
{
int n=input.nextInt();
if(n==1)
{
System.out.println(1);
}
else if(n==2)
System.out.println(2);
else if(n>=3&&n<=90)
{
long sum=0;
long i1=1;
long i2=2;
for(int i=3;i<=n;i++)
{
sum=i1+i2;
i1=i2;
i2=sum;
}
System.out.println(sum);
}
}
}
}
这题比较有趣,可以找下规律,f(1)=1(0-1),f(2)=2(0-2,0-1-1),f(3)=3(0-2-1,0-1-2,0-1-1-1),f(4)=5(0-1-1-1-1,0-2-2,0-1-1-2,0-2-1-1,0-1-2-1)
可以看出这是一个斐波那契数列,刚开始是用int传递数据,发现debug时有负值意识到可能会超出范围,所以改为long,解决问题。