Universiteti jizzax filiali amaliy matematika fakulteti «kompyuter ilmlari va dasturlashtirish» kafedrasi


Download 140.92 Kb.
bet2/4
Sana16.06.2023
Hajmi140.92 Kb.
#1491074
1   2   3   4
Bog'liq
struktura-2

Qo‘shish
A raqamiga b raqamini qo‘shadi va natijani a da saqlaydi:
int carry = 0;
for (size_t i=0; iif (i == a.size())
a.push_back (0);
a[i] += carry + (i < b.size() ? b[i] : 0);
carry = a[i] >= base;
if (carry) a[i] -= base;
}
Ayirish
A sonidan b (a \ge b) raqamini olib tashlaydi va natijani a da saqlaydi:
int carry = 0;
for (size_t i=0; ia[i] -= carry + (i < b.size() ? b[i] : 0);
carry = a[i] < 0;
if (carry) a[i] += base;
}
while (a.size() > 1 && a.back() == 0)
a.pop_back();
Bu erda biz ayirishni amalga oshirgandan so‘ng, yo‘q bo‘lgan predikatni saqlab qolish uchun etakchi nollarni olib tashlaymiz.
Uzun sonlarni ko‘paytirish
Uzun sonlar a ni qisqa b ga ko‘paytiradi (b < {\rm base}) va natijani a da saqlaydi:
int carry = 0;
for (size_t i=0; iif (i == a.size())
a.push_back (0);
long long cur = carry + a[i] * 1ll * b;
a[i] = int (cur % base);
carry = int (cur / base);
}
while (a.size() > 1 && a.back() == 0)
a.pop_back();
Bu erda biz bo‘linishni amalga oshirgandan so‘ng, yo‘q bo‘lgan predikatni saqlab qolish uchun etakchi nollarni olib tashlaymiz. (Izoh: qo‘shimcha optimallashtirish usuli. Agar ish tezligi juda muhim bo‘lsa, unda siz ikkita bo‘linishni bittasiga almashtirishga urinib ko‘rishingiz mumkin: bo‘linishning faqat butun qismini hisoblang (kodda bu yuk o‘zgaruvchisi) va keyin bo‘linishning qolgan qismini hisoblang (bitta ko‘paytirish operatsiyasi yordamida). Qoida tariqasida, ushbu usul kodni tezlashtirishga imkon beradi, garchi unchalik katta bo‘lmasa ham.)
Ikki uzun sonlarni ko‘paytirish
A ni b ga ko‘paytiradi va natijani c da saqlaydi:
lnum c (a.size()+b.size());
for (size_t i=0; ifor (int j=0, carry=0; j<(int)b.size() || carry; ++j) {
long long cur = c[i+j] + a[i] * 1ll * (j < (int)b.size() ? b[j] : 0) + carry;
c[i+j] = int (cur % base);
carry = int (cur / base);
}
while (c.size() > 1 && c.back() == 0)
c.pop_back();

Download 140.92 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling