CodeForces987B(思维题,用对数解决)+CoeForces900B(模拟)

第一题
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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值