【发布时间】:2010-06-27 19:20:53
【问题描述】:
我只是编写了一个将无符号整数分解为素数的过程。如果我将数据类型定义为“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。
【问题讨论】:
-
结果如何?怎么回事?
-
首先,请正确格式化您的代码,这几乎不可读。那么不要使用
char作为真值,在C89 中你应该总是使用int并且没有虚假的常量:我还没有见过有人使用255 作为真值,哇。但说到重点,你没有告诉我们失败的原因和原因。 -
如果我输入数据=4,那么它输出4=2*2*3*1597*-21753;我打印 data1/divider,它的结果是一个负数..但我将它定义为“无符号”。
-
您需要修复您的
printf和scanf- 对于 unsigned long 它需要是%ld。 -
@Paul:谢谢...我学会了%ld...现在可以完美运行了~~
标签: c long-integer division