Bir sayıyı ana çarpanlarına dönüştürecek bir program yapmaya çalışıyorum. Örneğin, 2048 = 2^11 program 211 çıkacaktır (çünkü bu değer farklı bir işlevde kullanılacaktır.). Program daha sonra birincil faktörizasyonu ve bir dosyadaki sayıyı yazdırır. Sorun şu ki, iki işlevi, digitCount ve FdigitCount sahip olmak, bir döngü içinde çalıştırmak ve değerleri dosyadan okumak ve sonra ana faktörleştirmedeki basamakların miktarını normal sayıdaki basamak sayısıyla karşılaştırmaktır. sayıları basmak daha azdır.C: işlevler döngüde çalışmayacak ve bir dosyadan okunamıyor
int digitCount(int n){
int digits = 0;
while(n!=0) {
n/=10; //divides the number by 10 and adds one to the digits until it is no longer divisible by 10.
++digits;
}
return digits;
}
int fdigitCount(int p){ //this function is used the count the digits of the prime factorization.
int fdigits = 0;
while(p!=0) {
p/=10; //divides the number by 10 and adds one to the fdigits until it is no longer divisible by 10.
++fdigits;
}
return fdigits;
}
int main(void) {
FILE* primes = NULL; //file pointer to the file that will contain all the prime factors of a number
int num;
int count;
int digits;
int limit;
int i;
int j=2;
int fdigits;
int frugalNum;
int normNum;
primes = fopen("primes.txt", "w+");
if (primes == NULL){
printf("Could not open primes.txt");
}
printf("Enter a limit: ");
scanf("%d", &limit);
for (i=2; i <= limit; i++){
num = i;
j = i;
count = 0;
if (num%2 == 0){
while (num%2 == 0)
{
num = num/2;
count++;
}
if (count > 1){
fprintf(primes, "2%d", count);
}
else {
fprintf(primes, "2");
}
}
else if(num%2 != 0) {
for (int i = 3; i <= sqrt(num); i = i+2)
{
// While i divides n, print i and divide n
count = 0;
while (num%i == 0)
{
num = num/i;
count++;
}
if (count > 1){
fprintf(primes, "%d%d", i, count);
}
else if (count==1){
fprintf(primes, "%d", i);
}
}
}
if (num > 2){
fprintf (primes, "%d", num);
}
fprintf(primes, " %d", j);
fprintf(primes, "\n");
}
while (!feof(primes)){
fscanf(primes, "%d %d", &frugalNum, &normNum);
if (fdigitCount(frugalNum) < digitCount(normNum)){
printf("%d\n", normNum);
}
}
fclose(primes);
return 0;
}
Bir fclose (...) ve bir fopen (...) özledim mi yoksa "append" modunda açılmış bir dosyadan okumaya mı çalışıyorsunuz? –
@MarcoSanfilippo, w + '(okuma/yazma) modunda açılmış gibi görünüyor. – Chad
İki işleviniz aynıdır. Fonksiyonun dışında hiçbir etkisi olmayan sadece isimler farklıdır. Böylece "fdigitCount (frugalNum)
purplepsycho