ich auf ein Problem gestoßen, während ich in C wurde die Umsetzung des vorgegebenen Algorithmus:Wie in C, um herauszufinden, ob eine doppelte Anzahl irgendwelche Ziffern hinter dem Komma hat
int getNumberOfAllFactors(int number) {
int counter = 0;
double sqrt_num = sqrt(number);
for (int i = 1; i <= sqrt_num; i++) {
if (number % i == 0) {
counter = counter + 2;
}
}
if (number == sqrt_num * sqrt_num)
counter--;
return counter;
}
- der Grund für die zweite Bedingung - ist macht eine Korrektur für perfekte Quadrate (dh 36 = 6 * 6), aber es nicht Situationen (False Positive) vermeiden wie diese:
sqrt(91) = 18.027756377319946
18.027756377319946 * 18.027756377319946 = 91.0
Also meine Fragen sind: wie es zu vermeiden, und was ist die beste Weg in C-Sprache, um herauszufinden, ob eine doppelte Zahl irgendwelche Nachkommastellen hat? Sollte ich Quadratwurzel-Werte von Double auf Integer anwenden?
Wird nicht die RHS (impliziten) vor dem Vergleich zu 'double' wieder umgewandelt werden? – CinCout
@CinCout Das wird kein Problem sein, der Dezimalteil wurde bereits verworfen, wenn an "int" geworfen wird. –
Ja. Macht Sinn. – CinCout