为什么在此代码中使用(long-long)强制转换会更改结果
Why does using a (long long) cast in this code change the result?
我为链接中的问题编写了这些代码https://www.codechef.com/JAN16/problems/RGAME
代码1>>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
long long int t[100001],i,MOD=1000000007;
t[0]=1;
for(i=1;i<100001;i++){
t[i]=(t[i-1]*2)%MOD;
//cout<<t[i]<<endl;
}
int test;
cin>>test;
long long int n,a[100001];
while(test--){
cin>>n;
for(i=0;i<=n;i++)
cin>>a[i];
long long int j=(2*a[0])%MOD;
long long int s=0;
for(i=1;i<=n;i++){
int x = (j * ((a[i] * t[n - i]) % MOD)) % MOD;
s = (s+ x) % MOD;
j = (j + (a[i] * t[i]) % MOD) % MOD;
}
cout<<s<<endl;
}
return 0;
}
代码2>>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
long long int t[100001],i,MOD=1000000007;
t[0]=1;
for(i=1;i<100001;i++){
t[i]=(t[i-1]*2)%MOD;
//cout<<t[i]<<endl;
}
int test;
cin>>test;
long long int n,a[100001];
while(test--){
cin>>n;
for(i=0;i<=n;i++)
cin>>a[i];
long long int j=(2*a[0])%MOD;
long long int s=0;
for(i=1;i<=n;i++){
int x = ((long long)(j) * (((long long)(a[i]) * t[n - i]) % MOD)) % MOD;
s = (s+ x) % MOD;
j = (j + ((long long)(a[i]) * t[i]) % MOD) % MOD;
}
cout<<s<<endl;
}
return 0;
}
可以看出,在代码1中,在for循环中进行计算时,我没有键入casted变量j和a[I],尽管它们被声明为long-long。在代码2中,我使用了类型转换。据我所知,这两种代码没有区别。但在提交时,我得到了代码1的错误答案,并接受了代码2。所以在我看来,在for循环中进行类型转换是不必要的,有人能告诉我为什么吗?
尝试这个
int x = (((a[i] * t[n - i]) % MOD) * j) % MOD;
s = (s + x) % MOD;
j = ((a[i] * t[i]) % MOD + j) % MOD;
如果要添加两个不同的值,请将较长的值放在第一位。。。
编辑:
如果s+x>2^^31-1,则需要另一种类型的转换:
s = (1LL * s + x) % MOD;
相关文章:
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 尝试将字符串/字符转换为整数会产生意外结果
- Static_cast转换为错误的数据类型,但结果仍然正确?
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- 字符到int8_t转换会产生意想不到的结果?
- 将字符串强制转换为GUID并不能得到正确的结果
- 转换为标准时,Clang和GCC中的不同结果::可选<T>
- 如何将 xt::sum 表达式结果转换为整数
- 将函数的地址转换为UINTPTR_T给我不正确的结果
- std::reduce 似乎将结果转换为整数
- 硬编码字符串与强制转换为 PUCHAR 并打印到控制台时从控制台读取的字符串的结果不同
- 为什么在 C# 中将 ushort 端口号从 hton 转换为 ntohs 会给出不同的结果
- time_t提高日期转换,给出不正确的结果
- 将词法强制转换双倍提升为字符串,给出无效结果
- 尝试将二进制数组转换为十六进制C++然后打印结果
- RapidJSON 在转换为字符串时产生不一致的结果
- 非常量表达式的左值到右值转换的结果是常数吗?
- 为什么隐式类型转换在此代码中结果不正确
- 在转换3D矢量时,为什么GLM给出错误的结果