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