数字を素因数分解に変換するプログラムを作成しようとしています。たとえば、2048 = 2^11の場合、プログラムは211を出力します(この値は別の関数で使用されるため)。プログラムは、素因数分解と数値をファイルに出力します。私が抱えている問題は、digitCountとFdigitCountという2つの関数をループで実行し、ファイルから値を読み込み、素因数分解の桁数を通常の数字の桁数と比較し、数字が少なくなる。C:関数がループで実行されず、ファイルから読み込まれない
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;
}
fclose(...)とfopen(...)が見つからなかったか、または「追加」モードでまだ開いているファイルから読み込もうとしましたか? –
@MarcoSanfilippoは、彼が 'w +'(読み取り/書き込み)モードで開いたようです。 – Chad
あなたの2つの機能は同じです。名前のみが異なり、機能の外には何の効果もありません。したがって、 'fdigitCount(frugalNum)
purplepsycho