首页 > 解决方案 > 减少java代码的运行时间

问题描述

谁能告诉我如何减少这个程序的运行时间?这是对代码 vita 2018 中提出的问题的回答,我遇到了时间错误。

import java.util.Scanner;

public class HelloWorld{

   public static void main(String []args){
       Scanner sc = new Scanner(System.in);
       long sum = 0;
       int N = sc.nextInt();

       for (int i = 0; i < N; i++) {
         final long x = sc.nextLong(); // read input
         String str = Long.toString((long) Math.pow(1 << 1, x));
         str = str.length() > 2 ? str.substring(str.length() - 2) : str;
         sum += Integer.parseInt(str);
       }
       System.out.println(sum%100);
   }
}

标签: java

解决方案


     final long x = sc.nextLong(); // read input
     String str = Long.toString((long) Math.pow(1 << 1, x));
     str = str.length() > 2 ? str.substring(str.length() - 2) : str;
     sum += Integer.parseInt(str);

这似乎是

  • 从输入中读取长
  • 以一种非常奇怪的方式将 2 提高到数字的幂
  • 将其转换为字符串
  • 从字符串中取出最后两位数字并将它们解析为数字
  • 将其添加到运行总和

只需使用 即可将 2 提高到一个数字的幂<<

可以使用 来获取数字的最后两位数字%100。无需将数字转换为字符串,然后解析该字符串的子字符串。

所以这些行可以重写为:

    final long x = sc.nextLong();
    long n = 1L << x;
    sum += n%100;

推荐阅读