测试数字是否可被4整除,最多100位

时间:2013-08-05 20:14:03

标签: c++

很简单,我通过在线评判练习编程。这是一个相当愚蠢的问题,非常简单。然而,法官一直说我得错了答案。我只是要粘贴只有几行的代码,以及问题的链接。

#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;
    }
}

问题只是输入可被4整除的每个数字的YES或NO,如果是,则为YES,如果不是则为NO。可以找到问题和每一分钟细节:http://coj.uci.cu/24h/problem.xhtml?abb=1306

这是相当愚蠢的,但我在这里试图弄清楚我做错了什么!

6 个答案:

答案 0 :(得分:10)

如果一个数字的两个最后十进制数字可被4整除,则该数字可被4整除。

结束。

P.S。有时候停止作为程序员思考并记住代数/算术是有道理的。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

如果你将数字X表示为Y + d,其中d = X%100且Y = X -d我们可以看到Y总是可以被100整除,例如对于数字X = 343535,Y将是343500由于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的倍数

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

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

答案 3 :(得分:0)

尽可能诱人,你不需要BitInteger来确定100位数字,100万位数字是否可被4整除。这只是简单的数学,你应该能够如果您不了解规则,请在一分钟内自己计算。

答案 4 :(得分:0)

问题可能是if (cases > 100)。因为这-1将是一个有效的选项。 更改为if (cases > 100 && cases < 1)以修复此问题

答案 5 :(得分:0)

我甚至不会阅读整个数字。我会在EOF字符(文件末尾)之前读取最后2位数字。

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

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