Çözüldü Yazılan kod nasıl geliştirilebilir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

SubhanXd

Centipat
Katılım
5 Kasım 2022
Mesajlar
161
Merhaba. Soru: Dört pozitif tam sayı A, B, C, D verilmiştir. Verilen kenar uzunluklarıyla bir kare oluşturulabiliyorsa herhangi bir sayının karesini bulun. Aksi takdirde "no" yazdırın.
Yazdığım kod:

C++:
#include <iostream>
using namespace std;

int main() {
 int a, b, c, d;
 cin >> a >> b >> c >> d;
 if (a>0 && b >0 && c>0 && d >0) {
 if (a == b && b == c && c == d)
 {
 cout << a *a << endl;
 }
 else
 {
 cout << "No" << endl;
 }
 }
}

Kod doğru ama site nedense 90 puan veriyor. Kacırdığım veya hatamın olduğu kısım neresi?
 
Çözüm
Kod:
#include <iostream>
using namespace std;

int main() {
   int a, b, c, d;
   cin >> a >> b >> c >> d;
   if (a>0 && b >0 && c>0 && d >0) {
   if (a == b && b == c && c == d)
   {
       cout <<(long long)(a *a) << endl;
   }
   else
   {
       cout << "No" << endl;
   }
   }
}

(long long)(a*a) değil de tam gösterdiğim gibi (long long)a*a yazmanız gerekiyor. Sizin yazdığınız halinde ilk overflow meydana gelip (çarpımın sonucu int sınırını aşıyorsa) sonra long long'a dönüştürme yapılıyor. Parantezsizken ilk a long long'a dönüşüyor, bu sayede işlem güvenli oluyor.
Merhaba. Soru: Dört pozitif tam sayı A, B, C, D verilmiştir. Verilen kenar uzunluklarıyla bir kare oluşturulabiliyorsa herhangi bir sayının karesini bulun. Aksi takdirde "no" yazdırın.
Yazdığım kod:

C++:
#include <iostream>
using namespace std;

int main() {
 int a, b, c, d;
 cin >> a >> b >> c >> d;
 if (a>0 && b >0 && c>0 && d >0) {
 if (a == b && b == c && c == d)
 {
 cout << a *a << endl;
 }
 else
 {
 cout << "No" << endl;
 }
 }
}

Kod doğru ama site nedense 90 puan veriyor. Kacırdığım veya hatamın olduğu kısım neresi?
Kod doğru çalışıyorsa sorun yok. Hangi siteden puanı görüyorsunuz?
 
  1. Herhangi bir sayı negatif veya sıfırsa hiçbir şey bastırmıyorsunuz.
  2. İki int'in çarpımı yine int sınırları içinde kalır. Eğer gerçek sonuç sınırların dışındaysa "overflow" yani "taşma" meydana gelir, gerçek değeri elde edememiş olursunuz. Sınır 10^5 ya da 10^9 falansa bu durum, sorun yaratır. a * a yerine (long long)a * a yazabilirsiniz veya sayıların tipini int'ten long long'a çevirebilirsiniz.
 
  1. Herhangi bir sayı negatif veya sıfırsa hiçbir şey bastırmıyorsunuz.
  2. İki int'in çarpımı yine int sınırları içinde kalır. Eğer gerçek sonuç sınırların dışındaysa "overflow" yani "taşma" meydana gelir, gerçek değeri elde edememiş olursunuz. a * a yerine (long long)a * a yazabilirsiniz veya sayıların tipini int'ten long long'a çevirebilirsiniz.
Deniyorum hemen.

  1. Herhangi bir sayı negatif veya sıfırsa hiçbir şey bastırmıyorsunuz.
  2. İki int'in çarpımı yine int sınırları içinde kalır. Eğer gerçek sonuç sınırların dışındaysa "overflow" yani "taşma" meydana gelir, gerçek değeri elde edememiş olursunuz. Sınır 10^5 ya da 10^9 falansa bu durum, sorun yaratır. a * a yerine (long long)a * a yazabilirsiniz veya sayıların tipini int'ten long long'a çevirebilirsiniz.
Yine 90 puan verdi.
 

Geri
Yukarı