C++ 为什么答案是垃圾价值?
我得到了一个垃圾值。为什么呢 但是,对于此输入:C++ 为什么答案是垃圾价值?,c++,C++,我得到了一个垃圾值。为什么呢 但是,对于此输入: 1 4 10 我得到的答案似乎完全正确。我不确定正确的输出应该是什么,但看起来您有一个溢出。在pow函数中,计算整个结果,然后取mod。由于结果可能非常大,甚至不适合long,因此在使用mod之前会溢出,从而得出错误的答案。一个简单的解决方案是实现一个Pow函数,该函数在mod乘法时接受mod。代码还存在一些其他问题,例如导入bits/stdc++.h,使用命名空间std,ll和M。。。。但这无关紧要。但我想这段代码是用来解决问题的 可能已解决
1
4 10
我得到的答案似乎完全正确。我不确定正确的输出应该是什么,但看起来您有一个溢出。在
pow
函数中,计算整个结果,然后取mod。由于结果可能非常大,甚至不适合long
,因此在使用mod之前会溢出,从而得出错误的答案。一个简单的解决方案是实现一个Pow
函数,该函数在mod乘法时接受mod。代码还存在一些其他问题,例如导入bits/stdc++.h
,使用命名空间std
,ll
和M
。。。。但这无关紧要。但我想这段代码是用来解决问题的
可能已解决问题的代码:
1
3 2
输出:
1 4 10
推荐阅读:使用调试器缩小问题范围。这段代码应该做什么?对于你投入的东西,你期望得到什么?我们需要这些信息来帮助您在此处调试输入:1 4 10垃圾值即将到来为什么?--如果您知道输入失败,为什么不将该输入放入代码本身?您发布的代码中不应该有
cin
语句——您应该使用错误的测试用例分配变量。请记住,我们不是在线评委网站——您应该获取代码,删除所有内容,如“sync_with_stdio”,使用适当的标题,删除疯狂的宏,如ll
,如果您知道测试数据,通过为变量分配测试数据,将测试数据放入程序。@Aplet123这不是一个在线竞争[在尽可能短的时间内产生最差的代码],而是专业开发人员的问答。所以需要一些翻译。OP可以在找到bug后,在提交之前将其转换回原样。
#include<bits/stdc++.h>
#define fastio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define ll long long
#define M 1000000007
using namespace std;
long long Pow(int n, int p)
{
if (p == 0) return 1;
auto res = Pow(n, p / 2);
res *= res;
res %= M;
if (p % 2 == 1)
res *= n, res %= M;
return res;
}
int main()
{
fastio;
int t;
cin >> t;
while(t--)
{
long n,a;
cin >> n >> a;
ll ans=0,x=a,y;
for(long i=1;i<=n;i++)
{
y=Pow(x,(2*i-1));
ans=(ans%M+y%M)%M;
x=(x*y)%M;
}
cout << ans << "\n";
}
}
1 4 10
707919736