Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
10
Cevap
762
Tıklama
0
Öne Çıkarma
Double'ın üstünde sayılar C
T
10 yıl
Yüzbaşı
Konu Sahibi

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?

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



D
10 yıl
Binbaşı

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.


Bu mesaja 1 cevap geldi.
T
10 yıl
Yüzbaşı
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @deniai
D
10 yıl
Binbaşı

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



T
10 yıl
Yüzbaşı
Konu Sahibi

Çok teşekkürler kodu yazmaya yeni başladım işime yarayacak bu bilgi


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @seyfi84
W
10 yıl
Binbaşı

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...]


Bu mesaja 1 cevap geldi.
T
10 yıl
Yüzbaşı
Konu Sahibi

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?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
W
10 yıl
Binbaşı

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)


Bu mesaja 1 cevap geldi.
T
10 yıl
Yüzbaşı
Konu Sahibi

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 >


Bu mesajda bahsedilenler: @welrocken
W
10 yıl
Binbaşı

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.



T
10 yıl
Yüzbaşı
Konu Sahibi

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?




Bu mesajda bahsedilenler: @seyfi84
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.