Programmnummer 1: In einem bestimmten Bereich ein und b wo eine < = b, mag ich, ob eine Zahl zu finden ist ein perfektes Quare, wenn ja dann drucken Sie seine Wurzel. Deshalb schrieb ich den folgenden Code:Perfekte Quadrate in einem bestimmten Bereich: abnormal Ausführung von Schleifen
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
float squaredroot(int n) {
float low = 0.0, mid;
float high = (float)n+1;
while ((high-low) > 0.00001) {
mid = (low+high)/2;
if (mid*mid < n) {
low = mid;
}
else {
high = mid;
}
}
return low;
}
int main() {
int a,b,i=0; cin>>a>>b;
float roo=0.0;
for(i=a;i<=b;i++){
roo=squaredroot(i);
if(floor(roo)==roo){
cout<<roo<<endl;
}
}
return 0;
}
Für die gegebene Eingabe 1 5
der Ausgang 2
sein sollte. Aber das obige Programm druckt keinen Wert.
Trotzdem, als ich versuchte, ein anderes Programm läuft unter Verwendung der gleichen Basiskonzept als Programmnummer 1, das oben erwähnt wird, wurde perfekt ausgeführt. Die Aufgabe für das folgende Programm ist es, zu überprüfen, ob die Eingabe ein perfektes Quadrat ist oder nicht. Wenn ja, dann drucke die Wurzel der Zahl, sonst drucke "Kein perfektes Quadrat!". Hier ist der Code für die Programmnummer 2:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
float squaredroot(int n) {
float low = 0.0, mid;
float high = (float)n+1;
while ((high-low) > 0.00001) {
mid = (low+high)/2;
if (mid*mid < n) {
low = mid;
}
else {
high = mid;
}
}
return low;
}
int main() {
int a; cin>>a;
float roo=0.0;
roo=squaredroot(a);
if(floor(roo)==roo){
cout<<roo<<endl;
}
else{
cout<<"Not a perfect square!"<<endl;
}
return 0;
}
Ich bin nicht in der Lage die Fehler im ersten Programm zu finden. Bitte helfen Sie.
Wenn Sie in ganzen Zahlen interessieren, warum verwenden Sie * float *? Der Typ float ist gut genug für einfache Berechnungen, bei denen Sie Rundungsfehler akzeptieren können. aber sonst ist es nichts als Ärger. –
@Gyro Düsentrieb Es gibt viele mögliche Wege, das obige Problem zu lösen. Aber die Hauptabsicht, diese Frage zu stellen, ist zu wissen, warum die _for_ und/oder _if_ Schleife in ** Programm 1 ** sich unnormal verhält. P.S. Der Titel der Frage wurde entsprechend geändert. –