1213. Массивные числа

 

Число назовем массивным, если оно записано в виде a^n, что означает возведение числа a в степень n. Вам требуется сравнить два массивных числа ab и cd, записанных в формате “<основание>^<экспонента>”.

Из двух заданных массивных чисел следует вывести большее.

 

Вход. Два массивных числа a и b в формате “<основание>^<экспонента>”. Известно, что 1 ≤ <основание>, <экспонента> ≤ 1000.

 

Выход. Большее число среди a и b.

 

Пример входа

Пример выхода

3^100 2^150

3^100

 

 

РЕШЕНИЕ

математика

 

Анализ алгоритма

Прологарифмируем неравенство ab < cd. Получим b lg a < d lg c. Значения выражений b lg a и d lg c помещаются в тип double, поэтому сравнить их не составит труда.

 

Реализация алгоритма

Читаем входные данные, выделяя основания и экспоненты из каждого числа.

 

scanf("%d^%d %d^%d",&a,&b,&c,&d);

 

Проведем сравнение прологарифмированных выражений b lg a и d lg c, после чего выведем ответ.

 

if (b * log(1.0 * a) < d * log(1.0 * c)) printf("%d^%d\n",c,d);

else printf("%d^%d\n",a,b);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    String s = con.nextLine();

    StringTokenizer st = new StringTokenizer(s," ^");

    int a = Integer.valueOf(st.nextToken()),

        b = Integer.valueOf(st.nextToken()),

        c = Integer.valueOf(st.nextToken()),

        d = Integer.valueOf(st.nextToken());

    if(b * Math.log(a) > d * Math.log(c))

      System.out.println(a + "^" + b);

    else

      System.out.println(c + "^" + d);

    con.close();

  }

}

 

Java реализация – Scanner, delimiter

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in).useDelimiter("\\s|\\^");

    //System.out.println(con.delimiter());   

    int a = con.nextInt();

    int b = con.nextInt();

    int c = con.nextInt();

    int d = con.nextInt();

    if(b * Math.log(a) > d * Math.log(c))

      System.out.println(a + "^" + b);

    else

      System.out.println(c + "^" + d);

    con.close();

  }

}