Şimdi Ara

Double'ın üstünde sayılar C

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
11
Cevap
0
Favori
671
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • C dilinde double'ın üzerinde olacak kadar basamak sayısına sahip iki sayıyı nasıl toplayabilirim? Mesela 2 tane 50 basamaklı sayıyı nasıl toplayabilirim?



  • 50 basamaklı sayıları toplama işlemi ile toplayabilir misin bilemiyorum. Belki bu iki sayıyı string (char *) olarak alıp, parçalayıp bu parçaları belli bir algoritma ile toplayabilir, daha sonra çıkan sonuçları bir araya getirip tek bir string olarak ekrana yazabilirsin. Örneğin; toplayacağın sayılar 15 ve 17 olsun. Bunları basamak basamak parçalayıp toplarsın.
    7 + 5 = 12.
    rakam = 2
    elde = 1
    1+1 = 2
    2 + elde = 3
    sonuc = 32 gibisinden birşey yaparsın. Çalışır mı bilmiyorum. Deneyip görmek lazım.

    Bunun dışında sayısal olarak toplamak istersen sanırım en büyük menzile sahip tür unsigned long long veya unsigned __int64. İkisinin de sınırı 0 ila 18,446,744,073,709,551,615. Bu türü kullanmayı deneyebilirsin.
  • deniai kullanıcısına yanıt
    Ben de öyle düşünmüştüm. Bildiğin charla tanımlayıp scanfte %s şeklinde yapsam tüm sayıyı alabilir mi? Yani diyelim 50 basamaklı bi değer girdi olduğu gibi printfte yazdırsam 50 basamakta gözükür mü?

    Önce basamaklarını bulan bi fonksiyon yazıp iki sayının ayrı ayrı bulup sonra senin dediğin şekilde yapabilirim gibi geliyo.
  • Sen sonuçta 50 karakterlik bir char dizisi alacaksın. 50 karakteri tek seferde alır. Hiç olmadı dene. 50 karakteri alıp ekrana yazdırmak birkaç satır kod
  • seyfi84 S kullanıcısına yanıt
    Çok teşekkürler kodu yazmaya yeni başladım işime yarayacak bu bilgi
  • Tam emin değilim ama print edebilmen için sayının bittiği yere '\0' koyman gerekebilir aynı şekilde scanf'lerken de x basamaklı bir input aldıysan scanf onu senin arrayine x basamak + '\0' şeklinde koyacak muhtemelen. Bilenler düzeltebilirlerse sevinirim. Dolayısıyla kullanıcı 10 basamaklı bir sayı girdiğinde senin arrayin aşağı yukarı şöyle bir şey olacak;
    [1234567890'\0'...kalan üyeler...]
  • welrocken W kullanıcısına yanıt
    C de tam olarak tür dönüştürmesi var mı bilmiyorum. Biraz önce basamak bulma kısmını yazdım şimdi toplama kısmı kaldı geriye. Önce büyük sayıyı buldurup for döngüsünde en son rakamdan ayrıştırarak başlayıp toplatıcam int dönüşümü yapılabiliyosa. Sonra bi tane daha char oluşturup (büyük sayının basamağı boyutunda) o tek tek toplamların (hani elde var 1 kısmı da bi sonrakiyle toplanmış vs halini) birleştirip o char'ı yazdırmayı denicem. 50şer basamak civarında sayılar var elimde.

    Senin dediğin olayı da tam olarak anlayamadım sebebini gets komutuyla aldım sayıları. Getste yine koyar mı aynı şekilde?
  • quote:

    Orijinalden alıntı: tes1907

    C de tam olarak tür dönüştürmesi var mı bilmiyorum. Biraz önce basamak bulma kısmını yazdım şimdi toplama kısmı kaldı geriye. Önce büyük sayıyı buldurup for döngüsünde en son rakamdan ayrıştırarak başlayıp toplatıcam int dönüşümü yapılabiliyosa. Sonra bi tane daha char oluşturup (büyük sayının basamağı boyutunda) o tek tek toplamların (hani elde var 1 kısmı da bi sonrakiyle toplanmış vs halini) birleştirip o char'ı yazdırmayı denicem. 50şer basamak civarında sayılar var elimde.

    Senin dediğin olayı da tam olarak anlayamadım sebebini gets komutuyla aldım sayıları. Getste yine koyar mı aynı şekilde?

    Tür dönüştürmeden kastın '0' 'ı 0'a dönüştürmekse basamağın örneğin c olsun, c-48 yapman yeterli (yanılmıyorsam 0'ın ascii'si 48'di)




  • welrocken W kullanıcısına yanıt
    Tam tersini istiyorum mesela '55' gelmiş 1. sayı olarak 2. sayı olarakta '107' gelmiş. Ben bunları en son basamaklarını alıcam en başta. 5 ile 7 mesela. Onu int'e çevirip toplatıcam 12 oldu. Önce 12'in modunu alıcam 10la, sonra 12'yi 10'a bölücem. Modu 2 bölümüyse 1 çıkıcak haliyle. Sonra sondan bi eksik basamakları alıcam 5 ile 0. Aynı şeyi buna da uygulayıp buna bi de 1'i eklicem. Bunları da bi yandan toplam diye bi char tanımının içine yazdırıcam. Hani toplam[buyukOlaninBasamakSayisi-n] diye for döngüsüne sokup sondan başa tekrar yazdırıcam. En son da büyük olanın basamak sayısından küçük olanınkini çıkarıp en baştan o sayıya kadar olan kısmı olduğu gibi toplam dediğim char'a yazdırcam. Böyle düşündüm açıkcası olurunu bilmiyorum deneyip görücem ama bana gelen 55 ve 107 sayısının aldırdığım basamaklarını nasıl int'e dönüştürürüm bilmiyorum



    < Bu mesaj bu kişi tarafından değiştirildi tes1907 -- 18 Mayıs 2015; 23:41:15 >




  • quote:

    Orijinalden alıntı: seyfi84

    C'de iki char arasında aritmetik işlem yapabilirsin, sonuç int olur, ör:
    char a='5';
    int k;
    k=a-'0';

    k'nın değeri 5 olur, öyle 48 falan gibi ascii/unicode tablo değerlerini ezbere bilmeye gerek yok.
    burada ascii/unicode gibi tablolarda sayıların hep ardışık olduğu kuralından faydalanmış oluyoruz.

    Hocam bi ödevle ilgili matlab'de uzun süre ascii table'a bakma durumunda kaldım yoksa fantezim yok ezberlemeye :D ama haklısınız 48 yerine '0' kullanmak sonradan okunabiliritesi açısından da çok daha mantıklı, düzeltme için teşekkürler.
  • seyfi84 S kullanıcısına yanıt
    Gerçekten çok teşekkürler programa uyarladım çalıştı. Programda anlayamadığım tek bi yer kaldı ama:
    "toplam = '\x0';" bu ifadede '\x0' tam olarak ne işe yarıyo?
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.