C++ ile Çok Büyük Sayıları Toplamak

İki sayıyı  C/C++ programlama dillerinde belli bir uzunluğa kadar toplayabiliyoruz. Örneğin 30 basamakli iki sayıyı toplamak varolan tiplerle imkansız. Peki bu işlemi nasıl yaparız? Aslında burada kullanılan mantık basit. String olarak iki sayıyı alıp, tersine çevirip  basamak basamak yani her defasında birer tane alıp tamsayıya çevirerek toplamaktan ibaret.


Burada kullanılan push_back fonkisyonu vektörün sonuna yeni eleman eklemek için kullanılıyor. Kendi veri yapınızı kullanarak da aynı işlemi yapabilirsiniz. Vektörlerin kullanımı ile ilgili bilgilere sayfanın sonundaki kaynaktan bakabilirsiniz.


#include <iostream>
#include <algorithm>

using namespace std;

void yerdegistir(string *x,string *y)
{
    string gecici;
    gecici=*x;
    *x=*y;
    *y=gecici;

}

 

string buyukSayiTopla(string n1, string n2) {
    if (n1.length() > n2.length())
        yerdegistir(&n1, &n2);

    string strToplam = "";
   
    int uzunluk1 = n1.length();
    //string cinsinden uzunluğu buluyoruz
   
    int uzunluk2 = n2.length();
    //string cinsinden uzunluğu buluyoruz
   
    int fark = abs(uzunluk1 - uzunluk2);
    //Basamak farkını buluyoruz


    int eldeki = 0;
    int toplam;

    for (int i=uzunluk1-1; i>=0; i--) {
        toplam = ((n1[i]-'0') + (n2[i+fark]- '0') + eldeki);
        strToplam.push_back(toplam%10 + '0');
        eldeki = toplam/10;
    }

   
    for (int i=fark-1; i>=0; i--) {
        toplam = ((n2[i]-'0')+eldeki);
        strToplam.push_back(toplam%10 + '0');
        eldeki = toplam/10;
    }

   
   if (eldeki)
        strToplam.push_back(eldeki+'0');

    reverse(strToplam.begin(), strToplam.end());
    return strToplam;
}

 

int main() {
    string s1 = "111111111111111111";
    string s2 = "111111111111111119";
    cout<<"Iki buyuk sayinin toplami: "<<buyukSayiTopla(s1, s2);
    return 0;
}


 

Bu sayfada yer alan kodlar Jetbrains firmasının Clion IDE'si ile yazılmıştır, Eclipse veya Netbeans gibi IDE'ler kullanabilirsiniz. C++ derleyicisi olarak MinGW kullanılmaktadır. Başka C++ derleyicileri kullandığınızda bu kodlarda yer alan komutların bulunduğu kütüphaneler farklı olabilir. İlgili komutları kendi derleyicinizin dökümanlarına bakarak projenize dahil ettiğinizde çalışacaktır. 

KAYNAKLAR

C++ dilinde push_back fonkisyonu
https://www.cplusplus.com/reference/vector/vector/push_back/


Aşağıdaki kaynaktan diğer yöntemlere bakabilirsiniz.
https://www.geeksforgeeks.org/sum-two-large-numbers/

 

Mutlu kodlamalar,
Ocak 2021
Oğuzhan TAŞ

Bookmark and Share