我在C中执行以下程序并收到错误:浮点异常(核心转储)。我删除了之前的零分错误,我有点卡在这里。提前感谢任何指示。
void main()
{
int i=0;
long long int num=600851475143;
for(i=1;i<num/2;i++)
{
if((num%i)==0)
{
for(int j=1;j<i/2;j++)
{
if((i%j)!=0)
printf("%d, ",i);
else break;
}
}
}
}
答案 0 :(得分:1)
你可以做的重要事情是
制作long long int num=600851475143LL;
。 LL
后缀确保其不属于int
类型。
for循环索引变量也应该是long long
。
这两项更改将确保不存在会导致未定义行为的溢出情况。
并确保在任何情况下都不会按0
命中除法(同时确保正确使用%
正确的操作数)。代码中断时使用断点。这将有助于您解决问题。
答案 1 :(得分:0)
使用limits.h和小的更改来解决问题。我的代码目前:
#include <limits.h>
#include <stdio.h>
int main () {
long long int res=0, i=2;
long long int num=600851475143;
while (num!=1) {
if (num%i==0) {
while (num%i==0) {
printf ("%lld\t", i);
num/=i;
}
res=i;
}
i++;
}
printf ("\n\nThe largest prime factor is : %lld\n\n", res);
return 0;
}