VS2010中的Mod问题

时间:2015-04-09 01:16:32

标签: c++

有一个很长的长号11111111111111111和一个int号99, 当我使用mod运算符时,它突然将99改为0.

此后,它再次变为99。 这是我的代码:

    if(cur.sum % N == 0 && cur.sum > 0){
        printf("%I64d  %d  %d  %d",cur.sum,N,cur.sum%N,N);
        return cur.t;
    }

除了获取数据之外,我从不改变N的值。 ![我的意思是vs2010] [1]

1 个答案:

答案 0 :(得分:1)

cur.sum%N仍为long long,需要printf %I64d,否则您的第一个%d会打印{{1}的前半部分最后long long的值将打印%d值*的后半部分。

要解决此问题,请更改printf:

long long

或者更好的是,在C ++标准库流上使用printf("%I64d %d %I64d %d",cur.sum,N,cur.sum%N,N); 运算符,这意味着您不需要指定格式参数。

注意*:根据计算机的字节顺序,不同机器上的值的前半部分和后半部分可能会有所不同。