Kodumda iki sayıyı çarpmaya çalışıyorum. Algoritma basittir (k) * (k-1)^nI değişkeni (k-1)^n değişken p1'de ve sonra n = 10 ile çarpın, k = 10 (k-1)^n-1 387420489 olmalı ve bunu p1 değişkeniyle aldım ama k ile çarparak negatif bir sayı elde ediyorum. 3874208490 yerine, başka büyük pozitif bir sayı elde ediyorum. Doğru yaklaşım nedir?Çarpımın üzerine taşması 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;
}
}
doğru girinti – MIbrah
kullanın 'i modulous' kullanılan - bir yazım denetimi kullanabilir ve modül daha sık. – greybeard
Ne yazık ki bu satya gününde sıçrama gibi görünüyor. Makro veya yazım denetimi yapıp, kodunuzu neredeyse erişilemez duruma getirdiniz. Yazılım geliştirme alanında bir kariyer planladığınızda kötü bir fikirdir ve bir kod gizleme yarışmasında kazanmak istiyorsanız daha fazla çaba göstermeniz gerekir. – user4581301