Je viens d'écrire une procédure pour décomposer un entier non signé en nombres premiers. cela fonctionnera normalement si je définis le type de données comme "int", si je le change en "long", le résultat sera faux. Je ne sais pas pourquoi.type entier long et division
BTW, j'ai utilisé Win-TC comme mon compilateur.
code comme ci-dessous:
#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;
}
Merci pour l'aide de Paul, je sais où est faux. % d devrait être remplacé par% ld.
Quel est le résultat? Comment est-ce mal? – djna
d'abord, s'il vous plaît formater votre code correctement, c'est à peine lisible. alors n'utilisez pas 'char' comme valeurs de vérité, en C89 vous devriez toujours utiliser' int' et pas de constantes fausses: je n'ai jamais vu personne utiliser 255 pour true, wow. Mais pour arriver au point, vous ne nous avez pas dit quoi et comment cela échoue. –
Si je saisis data = 4, alors output4 = 2 * 2 * 3 * 1597 * -21753; J'imprime le data1/divider, son résultat est un nombre négatif ... mais je l'ai défini comme "unsigned". –