很简单,我通过在线评判练习编程。这是一个相当愚蠢的问题,非常简单。然而,法官一直说我得错了答案。我只是要粘贴只有几行的代码,以及问题的链接。
#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
这是相当愚蠢的,但我在这里试图弄清楚我做错了什么!
答案 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的捕获值,但这不应该很难)