私のコードでは、2つの数値を掛けようとしています。アルゴリズムは、(p-1)^ nを変数p1に格納してから私はk = 10で、k = 10(k-1)^ n-1は387420489でなければならず、これは変数p1で得られますが、kと掛け合わせると負の数になります。 3874208490の代わりに、私は他の大きな正の数を取得します。正しいアプローチは何ですか?C++の乗算でオーバーフローが発生する
#include <iostream>
using namespace std;
typedef long long ll;
ll big = 1000000000 + 7;
ll multiply(ll a, ll b)
{
ll ans = 1;
for (int i = 1; i <= b; i++)
ans = ans * a;
return ans % big;
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
ll n, k;
cin >> n >> k;
ll p1 = multiply(k - 1, n - 1);
cout << p1 << endl; // this gives correct value
ll p2 = (k % big) * (p1 % big);
cout << ((p2 + big) % big) % big << endl;
}
}
適切なインデント – MIbrah
を使用してください '私はmodulous'を使用 - スペルチェックを使用し、弾性率がより頻繁に。 – greybeard
悲しいことに、これは土曜日の日にジャンプするように見えます。あなたはマクロ化されているか型付き型であり、あなたのコードの名前は変わりませんでした。あなたがソフトウェア開発のキャリアを計画しているならば、あなたはコードの難読化競争で勝つことを望むなら、あなたはもっと努力しなければならないでしょう。 – user4581301