gpt4 book ai didi

c - 整型长整型和除法

转载 作者:行者123 更新时间:2023-11-30 16:04:26 25 4
gpt4 key购买 nike

我只是编写了一个将无符号整数分解为素数的过程。如果我将数据类型定义为“int”,它会正常工作,如果我将其更改为“long”,结果将是错误的。我不知道为什么。

顺便说一句,我使用 Win-TC 作为我的编译器。

代码如下:

#include "stdio.h"
#define True 0xff
#define False 0x00
char DividerIsPrime(unsigned long data);
void CheckIfDataCanBeExtracted(unsigned long data);
main()
{
unsigned long data;
printf("please input data:");
scanf("%d",&data);
printf("\n%d=",data);
CheckIfDataCanBeExtracted(data);
// printf("%d",sizeof(short));
getch();
}

void CheckIfDataCanBeExtracted(unsigned long data)
{
unsigned long divider,temp,data1;
data1=data;
for(divider=2;divider<=data;divider++)
{
temp=data1%divider;
if(temp) {continue; }
if(DividerIsPrime(divider)) {
data1 = data1/divider;
printf("%d",divider);
if(data1==1) break;

else {printf("*"); divider--;}


}
}
return;

}

/* Check if this number is a prime number */
char DividerIsPrime(unsigned long data)
{
unsigned long divider;
char status=True;
for(divider=2;divider<data;divider++)
{
if(data%divider) status=True;
else status=False;
}
return status;
}

感谢Paul的帮助,我知道哪里出了问题。 %d 应替换为 %ld。

最佳答案

您的函数DividerIsPrime(如当前编写的)存在缺陷,从逻辑上讲它必须始终返回True

原因是状态在每次迭代时都会改变。即使达到 status=False(该数字是合数,因为除法器的模数为零),迭代仍将继续,并且在每种情况下,status=Truedivider == (data - 1)时,将在最终迭代中达到。

您可以按如下方式更改此设置:

/* Check if this number is a prime number */
char DividerIsPrime(unsigned long data)
{
unsigned long divider;
for(divider=2;divider<data;divider++)
{
if (0==(data % divider))
return False;
}

return True;
}

您可能会通过一些“单元测试”发现这一点,例如:

assert(DividerIsPrime(5));
assert(!DividerIsPrime(6)); /* This test would fail without corrected code. */

显然,有更有效的“素性测试”算法。

关于c - 整型长整型和除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com