【问题标题】:0%2 coming out to be 10%2 变成 1
【发布时间】:2014-03-03 22:12:14
【问题描述】:

我遇到了一个奇怪的问题。 Here 是我正在处理的输入和输出代码的链接。 我遇到问题的 sn-p 发布在这里

printf("before modulo r= %d ,ans =%d\n",r/b,ans );
ans=(ans)%2;
printf("after modulo r = %d ,ans =%d\n",r,ans);

可以看到,在执行第 24 行 ans = 0 之前的第二次迭代中,之后它变为 1 而不是像 0%2=0 那样保持为 0。我真的无法理解这个问题

【问题讨论】:

    标签: c++ c modulo


    【解决方案1】:

    你的第一个打印不打印 ans,因为你的 b 是一个 long long int,所以 r/b 是一个 long long int,它有 64 位,你的第一个打印会将前 32 位打印为 r 和下一个 32 位作为 ans。你的 ans 从一开始就永远不会是 0。

    请下次发布您的代码,而不是链接它。

    【讨论】:

    • 更进一步 - 要修复输出,请将 %d 替换为 %lld,或强制转换 (int)(r/b) 。对于printf,参数类型(在默认提升之后)必须与说明符匹配,否则行为未定义。
    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多