有一个很长的长号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]
答案 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);
运算符,这意味着您不需要指定格式参数。
注意*:根据计算机的字节顺序,不同机器上的值的前半部分和后半部分可能会有所不同。