关于*1ll的疑问

学术版

听取MLE声一片 @ 2020-12-19 15:17:57

乘1ll是须要放在开头吗?做树状数组题的时候放在后面WA,放在前面AC。(肯定是我太菜了所以我不知道)

WA:https://www.luogu.com.cn/record/43901338

AC:https://www.luogu.com.cn/record/43901361

再看看 这篇博客感觉好奇怪了,有没有dalao讲解一下


by Ryo_Yamada @ 2020-12-19 15:20:36

int x = 1e9, y = 1e9;
ll ans = x * y * 1ll;
ll ans2 = 1ll * x * y;
printf("%lld ---- %lld\n", ans, ans2);

by 鏡音リン @ 2020-12-19 15:25:06

拿脚趾头想就知道肯定不能放后面吧


by 鏡音リン @ 2020-12-19 15:25:41

1ll的目的是让乘法不溢出,你先乘溢出完了再转ll还有啥用


by Ryo_Yamada @ 2020-12-19 15:25:41

铃酱 /se

好像确实是这样的


by 江户川·萝卜 @ 2020-12-19 15:27:29

例如:(a,b都是int类型)

1ll*a*b相当于(1ll*a)*b 是将a乘上1ll变为long long类型后再乘b。如1ll*1e9*1e9=1e9(long long)*1e9

a*b*1ll相当于(a*b)*1ll

1e9*1e9*1ll=(设c=1e9*1e9int存储溢出之后的值)c*1ll=c(long long)


by 听取MLE声一片 @ 2020-12-19 15:35:50

懂了谢谢!


by 听取MLE声一片 @ 2020-12-19 15:36:06

@江户川·萝卜 您咋藏勾了


by 江户川·萝卜 @ 2020-12-19 15:54:57

@听取MLE声一片 啊为啥不藏钩啊/fad


by 绝顶我为峰 @ 2020-12-19 16:00:19

铃/se


|