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?
#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 along long'a dönüşüyor, bu sayede işlem güvenli oluyor.
Kenar uzunlugu hepsi sifirdan buyuk degilse No yazdirmiyorsun. ( ilk if blogu )
Bir de soruda "no" demissin kodda "No" yaziyorsun ama bu sorun olsaydi 90 dan dusuk alirdin
Kenar uzunlugu birbirlerine esit degilse No yazdirmiyorsun.
Bir de soruda "no" demissin kodda "No" yaziyorsun ama bu sorun olsaydi 90 dan dusuk alirdin
Kenar uzunlugu hepsi sifirdan buyuk degilse No yazdirmiyorsun. ( ilk if blogu )
Bir de soruda "no" demissin kodda "No" yaziyorsun ama bu sorun olsaydi 90 dan dusuk alirdin
#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 along long'a dönüşüyor, bu sayede işlem güvenli oluyor.
(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 along long'a dönüşüyor, bu sayede işlem güvenli oluyor.