【发布时间】:2016-11-07 15:39:33
【问题描述】:
这个程序在 C 中对数字进行质因数分解。
#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;
}
该程序适用于小于 108 的数字。但我的问题是,是否有办法让这个程序甚至适用于像 1012 这样的数字。我知道 int 是不够的,但是当我尝试例如 long int 时,它没有用。我也听说过一些关于 malloc 的事情,但我一直未能实现(理解)它。
【问题讨论】:
-
给定 32 位系统,
int和long都可以包含高达 (2^32)/2 -1 的数字。您可以使用long long,它是一个 64 位类型,或者更好的是,uint64_t,它给出 (2^64)-1。整数值的范围通常在每本初级 C 编程书籍的第一章中都有说明。 -
你想看看 C 整数类型。
-
@Lundin Win64 也有 32 位
int和long;后者是为了与 Win32 兼容。
标签: c int primes long-integer