C 数字600851475143中最大的素因子是什么?
我想知道我的代码中的错误是什么C 数字600851475143中最大的素因子是什么?,c,C,我想知道我的代码中的错误是什么 int main () { long long int number, large_factor=0, i=2; printf ("Enter a number : "); scanf ("%ld", &number); while (number!=1) { if (number%i==0) { while (number%i==0) { printf ("%ld\t", i);
int main () {
long long int number, large_factor=0, i=2;
printf ("Enter a number : ");
scanf ("%ld", &number);
while (number!=1) {
if (number%i==0) {
while (number%i==0) {
printf ("%ld\t", i);
number/=i;
}
large_factor=i;
}
i++;
}
printf ("\n\nThe largest prime factor is : %ld\n\n", large_factor);
return 0;
}
此代码对于较小的数字运行良好,但为什么对于较大的数字它会失败?您的格式说明符处处都是long int,您应该使用%lld。当我修复格式说明符时,它对于600851475143运行良好,给出了最大的素因子6857 一定还有别的事。假设您的编译器是兼容的long-long-int至少应该是64位整数,并且可以轻松地大到足以容纳该值 试一试 在顶部添加了include 它应该产生一个不小于9223372036854775807的值,可能就是这个确切的数字 在这里:
为什么要提示输入一个条目并使用scanf,而不仅仅将其作为命令行参数?用一个参数会更习惯。你们知道变量大小和最大值是什么吗?我不知道。调试器告诉您了什么?请尝试使用%lld而不是%ld检查编译器的警告设置。好的编译器对由回答的问题发出警告。打开所有警告-它可以节省您的时间并生成更好的代码。使用double将是一个坏主意,因为它们的性质不精确。使用double将是一个好主意!我使用了错误的格式说明符!我不知道为什么我总是犯这样的错误!
printf("long long int max : %lld\n",LLONG_MAX);
#include <limits.h>
#include <stdio.h>
int main () {
printf("long long int max : %lld\n",LLONG_MAX);
long long int large_factor=0, i=2;
long long int number=600851475143;
while (number!=1) {
if (number%i==0) {
while (number%i==0) {
printf ("%lld\t", i);
number/=i;
}
large_factor=i;
}
i++;
}
printf ("\n\nThe largest prime factor is : %lld\n\n", large_factor);
return 0;
}