Dieses Programm macht Primfaktorzerlegung von Zahlen in C.Primfaktorzerlegung von größeren Zahlen als int
#include <stdio.h>
int main(void) {
int number, i, p, n, factors, count;
int numbers[1000000];
int counter = 0;
char text[100000];
for (count = 0; count < 1000000; count++) {
fgets(text, 10000000, stdin);
if (sscanf(text, "%d", &number) == 1) {
if (number == 0)
break;
numbers[count] = number;
} else {
numbers[count] = 0;
}
}
counter = 0;
for (i = 0; i < count; i++) {
if ((numbers[i] < 0) || (numbers[i] == 0)) {
fprintf(stderr, "Error: Wrong Input!\n");
return 100;
break;
}
number = numbers[i];
printf("Prime factorization of nubmer %d is:\n", number);
factors = 0;
for (p = 2; p * p <= number; p += 1 + (p & 1)) {
if (number % p == 0) {
n = 0;
factors++;
do {
number /= p;
n++;
} while (number % p == 0);
if (n == 1) {
printf("%d ", p);
++counter;
} else
printf("%d^%d ", p, n);
++counter;
if (count > 0 && number != 1)
printf("x ");
}
}
if (factors == 0 || number != 1)
printf("%d", number);
printf("\n");
}
return 0;
}
Dieses Programm arbeitet für Zahlen Fein kleiner als 10 . Aber meine Frage ist, ob es eine Möglichkeit gibt, dieses Programm auch für Zahlen wie 10 zu machen. Ich weiß, dass Int nicht genug wäre, aber wenn ich zum Beispiel Long Int versuchte, hat es nicht funktioniert. Ich habe auch etwas über Malloc gehört, aber ich habe es immer noch nicht umgesetzt.
ein 32-Bit-System gegeben, 'int' und' long' kann beiden Zahlen enthält bis zu (2^32)/2 -1. Sie könnten 'long long' verwenden, das ist ein 64-Bit-Typ, oder besser noch," uint64_t ", was (2^64) -1 ergibt. Der Bereich der Integer-Werte wird normalerweise in den ersten Kapiteln jedes C-Programmierbuchs für Anfänger erläutert. – Lundin
Sie möchten sich C-Integer-Typen ansehen. – Olaf
@Lundin Win64 hat auch 32 Bit 'int' und' long'; Letzteres für die Kompatibilität mit Win32. – Olaf