循环数比较

循环数比较

题目描述
对于任意两个正整数x和k,我们定义repeat(x, k)为将x重复写k次形成的数,例如repeat(1234, 3) = 123412341234,repeat(20,2) = 2020.
牛牛现在给出4个整数x1, k1, x2, k2, 其中v1 = (x1, k1), v2 = (x2, k2),请你来比较v1和v2的大小。
输入描述:
输入包括一行,一行中有4个正整数x1, k1, x2, k2(1 ≤ x1,x2 ≤ 10^9, 1 ≤ k1,k2 ≤ 50),以空格分割
输出描述:
如果v1小于v2输出"Less",v1等于v2输出"Equal",v1大于v2输出"Greater".
示例1
输入

1010 3 101010 2

输出
Equal
上代码:

import java.util.*;
public class Main{
    public static void main(String[] args)
    {
       Scanner sc=new Scanner(System.in);
       int x1=sc.nextInt();
       int k1=sc.nextInt();
       int x2=sc.nextInt();
       int k2=sc.nextInt();
       int sb111=0,sb222=0;
       if(k1==k2)
       {
           System.out.println(x1>x2?"Greater":(x1==x2?"Equal":"Less"));
       }else
       {
           StringBuffer sb1=new StringBuffer();
           StringBuffer sb2=new StringBuffer();
        for(int i=0;i<k1;i++)
        {
            sb1.append(x1);
        }
        for(int i=0;i<k2;i++)
        {
            sb2.append(x2);
        }
        for(int i=0;i<sb1.length();i++)
        {
            sb111=sb1.charAt(i);
        }
        for(int i=0;i<sb2.length();i++)
        {
            sb222=sb2.charAt(i);
        }
           if(sb1.length()>sb2.length())
           {
               System.out.println("Greater");
            }
           else if(sb1.length()<sb2.length())
           {
               System.out.println("Less");
           }
           else
           {
               System.out.println(sb111>sb222?"Greater":(sb111==sb222?"Equal":"Less"));
           }
       }
    }
}

说明如下:

  1. 本题目中最大的陷阱就是在多次运算之后,当我们把x重写k次之后,就不能直接用字符串转整型了{ long sb=Long.parseLong(sb1.toString());出现了转换越界的情况,当然int sb111=Integer.parseInt(sb1);就更不行了}
  2. 如果强制转化则会出现如下报错信息:
Exception in thread "main" java.lang.NumberFormatException: For input string: "3333333333333333333333333333333333"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
	at java.base/java.lang.Long.parseLong(Long.java:699)
	at java.base/java.lang.Long.parseLong(Long.java:824)
	at leetcode.Main5.main(Main5.java:28)

多方查找资料后才知道转化越界,所以就采用了如上代码所展示的内容。
注:
java.lang.String.charAt() 方法返回指定索引处的char值。索引范围是从0到length() - 1。对于数组索引,序列的第一个char值是在索引为0,索引1,依此类推。
3. 本题解法:
(1)输入数据;
(2)判断在k1是否等于k2,如果等于,则直接比较;
(3)如果不相等就将x1放到StringBuffer中,放k1次,同理操作x2;比较sb1和sb2。先判断长度,长度大的当然就大,否则比较sb111和sb222;
(4)sb111是取出sb1中的值转换成整型再比较。
循环数比较_第1张图片
完成 !!!

你可能感兴趣的:(循环数比较)