我只寫了一個過程來將無符號整數分解爲素數。如果我將數據類型定義爲「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;
}
感謝保羅的幫助下,我知道錯了。 %d應該被替換爲%ld。
結果是什麼?它怎麼錯了? – djna 2010-06-27 06:26:35
首先,請正確格式化您的代碼,這幾乎不可讀。然後不要使用'char'作爲真值,在C89中你應該總是使用'int'而不是假的常量:我從來沒有看到有人使用255作爲真,哇。但是要說到這一點,你沒有告訴我們這是什麼以及如何失敗。 – 2010-06-27 06:35:44
如果我輸入數據= 4,那麼它輸出4 = 2 * 2 * 3 * 1597 * -21753; 我打印data1/divider,其結果是負數..但我將其定義爲「無符號」。 – 2010-06-27 06:40:10