Je suis en train de construire un programme qui va multiplier par 2, et atteindre de longs nombres précis. Ici, je construis un programme dans lequel chaque chiffre est stocké dans une variable différente. Lorsque je compile le programme, et je tape 2^63, il me donne la bonne réponse. Mais quand je tape 2^64, j'obtiens un "défaut de segmentation".Puissance de 2, essayant d'atteindre 2^1000, erreur de segmentation
Qu'est-ce que c'est? Que puis-je faire?
#include <stdio.h>
int main(void)
{
printf("2^n, enter n: ");
int n, array = 1;
scanf("%d", &n);
int num[array];
num[0] = 2;
int remainder = 0;
if (n > 1) {
int counter = 0;
int counter3 = 1;
for (counter3 = 1; counter3 < n; counter3++) {
remainder = 0;
for (counter = 0; counter < array; counter++) {
num[counter] *= 2;
num[counter] += remainder;
remainder = 0;
if (num[counter]/10 != 0) {
remainder = num[counter]/10;
num[counter] -= remainder * 10;
if (counter+1 >= array) {
array++;
num[counter+1] = remainder;
remainder = 0;
break;
}
}
}
}
}
int counter2;
for (counter2 = array - 1; counter2 >= 0; counter2--)
printf("%d", num[counter2]);
putchar('\n');
return 0;
}
pouvez-vous corriger l'indentation? –
Là, j'ai corrigé le formatage pour vous (et j'ai aussi démêlé un peu le contrôle, mais je n'ai pas corrigé le bogue). – zwol
Veuillez également noter: '(x/10) * 10' est mieux épelé' x% 10'; le mot que vous vouliez est «reste», pas «rappel»; l'espacement cohérent dans les expressions et les appels de fonctions est presque aussi important que l'indentation. – zwol