0

Simply enough, I practice programming via an online judge. This is a rather stupid problem, really easy. However, The judge keeps saying I have a wrong answer. I'm just going to paste the code which is just a few lines, and a link to the problem.

#include <iostream>
#include <string>

using namespace std;

int main() {

    int cases = 0;
    string solution = "";
    cin >> cases;

    if (cases > 100)
        return(0);

    for (int i = 0; i < cases; i++) {
        int temp = 0;
        cin >> temp;
        if ((temp % 4) == 0)
            solution +="Y";
        else
            solution +="N";
    }

    for (int j = 0; j < cases; j++) {
        if (solution[j] == 'Y')
            cout << "YES";
        else
            cout << "NO";
        cout << endl;
    }
}

The problem is simply to output YES or NO for each number that is input that is divisible by 4, YES for if it is, NO if its not. The problem and every minute detail can be found: http://coj.uci.cu/24h/problem.xhtml?abb=1306

This is rather silly, but I'm going bonkers here trying to figure out what I'm doing WRONG!

4

6 回答 6

10

如果一个数的最后两位小数可以被 4 整除,则该数可以被 4 整除。

结束。

PS 有时停止作为程序员思考并记住代数/算术是有意义的。

于 2013-08-05T20:55:43.023 回答
3

正如我在评论中所说,问题是您不能直接将 100 位数字读入 int 。我不想给你算法的解决方案,而是一个应该有帮助的提示:如果这个数字可以被 2 或 5 整除,你需要多少位数?你怎么能把它扩展到4?

于 2013-08-05T20:25:23.723 回答
1

如果将数字 X 表示为 Y + d,其中 d = X%100 和 Y = X -d,我们可以看到 Y 总是能被 100 整除,例如对于数字 X = 343535,Y 将是 343500,d 将是 35。由于 Y 能被 100 整除,意味着它可以被 4 整除,所以你可以确定 X 是否能被 4 整除,检查 d 是否能被 4 整除,即 X 的最后两位数。

正式地它将是:

Y = 4*Z

Y = 100*X +d

Y = 4*Z = 4*25*X +d

d = 4*(Z - 25*X)

即如果Y是4的倍数,d是4的倍数

你必须应用这个原则来解决你的问题。

只需读取一个原始字符串并检查最后两个字符表示的数字是否可以被四整除。

于 2013-08-05T21:00:13.523 回答
0

或许问题就是这个if (cases > 100)。因为这个 -1 将是一个有效的选项。更改if (cases > 100 && cases < 1)为修复它

于 2013-08-05T20:40:45.203 回答
0

尽管可能很诱人,但您不需要BitInteger弄清楚 100 位数字中的 100 位数字是否可以被 4 整除。这只是简单的数学运算,您应该能够在一分钟内自己计算出来,如果你不知道规则。

于 2013-08-05T20:34:22.883 回答
0

我什至不会读整个数字。我只会读取 EOF 字符(文件结尾)之前的最后 2 位数字。

string inputString;
while(getline(cin,inputString)
{
    //code for finding x %4==0 and output
}

那么您需要做的就是将最后 2 个字符转换为 int,然后执行您的 mod 4 代码。(对于小于 10 的数字,您需要一个捕获值,但这应该不难)

于 2013-08-05T21:01:04.843 回答