第一题
Description
给你两个数x, y, 比较 x^y 和 y ^ x 的大小
Input
两个数 x, y, ( 1 <= x , y <= 109 )
Output
如果 x ^ y < y ^ x , 输出 “<”
如果 x ^ y > y ^ x , 输出 “>”
如果 x ^ y = y ^ x , 输出 “=”
Sample Input
Input
5 8
Output
Input
10 3
Output
<
Input
6 6
Output
=
Hint
第一个例子 5 ^ 8 = 390625, 8 ^ 5 = 32768. 输出 ‘>’.
第二个例子 10 ^ 3 = 1000 < 3 ^10 = 59049.
第三个例子 6 ^ 6 = 46656 = 6 ^ 6.
/*
数据量是10^9 ,不能用快速幂
简单的方法:
如果 x^y <y^x ,则 log(x^y)<log(y^x)(因为 log 函数是递增的)
则 ylog(x) < xlog(y)
所以想到用对数来解决
注意的是:用对数的时候,会出来小数,则需要用 double 型的
10^9 用long long int ,或者是 double
用对数的时候:
c++包含头文件 #include<cmath>
1.double log(double x) 求的是lnx(以 e 为底的对数)
2.double log10(double x) 求 log(10)(x)
求一般的话,假如以a为底的b的对数(log(a)(b))
利用换底公式转化为
lg(b)/lg(a)或 ln(b)/ln(a) 进行求解
*/
代码如下:
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<iostream>
using namespace std;
int main()
{
double x,y,a,b;
cin>>x>>y;
if(x==y)
cout<<'=';
else
{
double ans,ans1;
ans=y*log(x);
ans1=x*log(y);
if(ans-ans1==0)
cout<<'=';
if(ans-ans1<0)
cout<<'<';
if(ans-ans1>0)
cout<<'>';
cout<<endl;
}
}
第二题
Description
现有一式子 a / b. 你需要找出数字 c 在小数点后第一次出现的位置
Input
输入包含三个整数 a, b, c (1 ≤ a < b ≤ 105, 0 ≤ c ≤ 9).
Output
输出数字 c 第一次在小数点后出现的位置,如果 c 不在小数点后出现输出 -1
Sample Input
Input
1 2 0
Output
2
Input
2 3 7
Output
-1
Hint
第一组样例 : 1 / 2 = 0.5000(0) 出现在第二个位置
第二组样例 : 2 / 3 = 0.6666(6) 7 没有出现,输出 -1
/*
就是简单的模拟,按照除法的步骤来模拟,先乘 10 ,求出来小数之后,判断该位数是不是 c ,
是的话停止循环,
不是的话求出来余数,用余数继续 乘 10,继续判断是不是 C
结束循环的条件是:找了已经 10^5 ,还没有找到,就结束循环,输出 -1
宏定义 N ,超过 N 的时候,就结束循环,写的时候这一点没有想到
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
#define N 100000
int main()
{
int a,b,c;
int flagg=0;
int flag=0;
scanf("%d %d %d",&a,&b,&c);
while(1){
int sum,sum1;
a*=10;
flag++;
sum=a/b;
if(sum==c)
{
printf("%d",flag);
break;
}
sum1=a%b;
a=sum1;
if(flag==N){
flagg=1;
break;
}
}
if(flagg==1)
printf("-1\n");
}