" codeChef INTEST"解决方案中没有获得1行

时间:2014-11-11 09:03:08

标签: java

此问题的目的是验证用于读取输入数据的方法是否足够快以处理带有巨大输入/输出警告的问题。您应该能够在运行时每秒处理至少2.5MB的输入数据。

http://www.codechef.com/problems/INTEST/

输入

输入以两个正整数n k(n,k <= 107)开始。接下来的n行输入包含一个正整数ti,每个整数不大于109。 输出

写一个整数到输出,表示有多少整数ti可以被k整除。 实施例

输入: 7 3

1

51

966369

7

9

999996

11

输出: 4

我的解决方案是: -

import java.io.*;

class Main {

public static void main(String[] args) throws IOException {

    int ans = 0;
    int count = 0, n = 0, in = 0, data = 0;
    byte[] b = new byte[1024];

    InputStream is = null;

    try {
        is = new FileInputStream("G://test1.txt");

    } catch (Exception e) {
        System.out.println(e);
    }

    while ((in = is.read()) != ' ')

        count = count * 10 + in - '0'; // how does this line work ? 

    while ((in = is.read()) != '\n')

        n = n * 10 + in - '0';

    for (int i = 0; i < count; i++) {

        in = is.read(b, 0, 1024);

        if (in == -1) {

            break;

        }

        for (int j = 0; j < in; j++) {

            if (b[j] != '\n') {

                data = data * 10 + b[j] - '0';

            } else {

                if (data % n == 0)

                    ans++;

                data = 0;
            }
        }
    }
    System.out.println(ans + "ans");
}
}

count = count * 10 + in - '0'; //这条线如何运作?

1 个答案:

答案 0 :(得分:1)

count = count * 10 + in - '0';这会将字符数组(作为输入序列)转换为其对应的整数值。这里“in”是一个你需要从中减去零的字符,以便获得与该字符对应的实际整数值。

示例,假设你想解析24

您想要将此字符序列解析为整数值

你从字符'2'中通过从中减去字符'0'来获得2

计数即为2

当遇到字符4时,你从字符'4'中通过从中减去字符'0'获得4

现在计数变为2 * 10 + 4 = 24

这是我的一个干净的代码来做同样的事情

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws NumberFormatException,
            IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
            System.in));
        String[] line = reader.readLine().split("\\s");
        int n = Integer.parseInt(line[0]);
        int k = Integer.parseInt(line[1]);
        int count = 0;
        for (int i = 0; i < n; i++) {
             int t = Integer.parseInt(reader.readLine());
             if (t % k == 0) {
                 ++count;
             }
        }
        System.out.println(count);
   }
}