Я просто пишу процедуру для разложения целого числа без знака на простые числа. он будет работать нормально, если я определяю тип данных как «int», если я изменю его на «long», результат будет неправильным. Я не знаю почему.целочисленный тип long и деление
BTW, я использовал 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
сначала, пожалуйста, правильно отформатируйте свой код, это едва читаемо. , тогда не используйте значения 'char' как значения истинности, в C89 вы всегда должны использовать' int' и никакие фиктивные константы: я еще не видел, чтобы кто-то использовал 255 для true, wow. Но, чтобы прийти к выводу, вы не сказали нам, что и как это не удается. –
Если я ввожу данные = 4, то он выводит4 = 2 * 2 * 3 * 1597 * -21753; Я печатаю data1/divider, его результат - отрицательное число ... но я определил его как «unsigned». –