Enviado em 18/03/2018 - 09:07h
Já pesquisei e vi que esse erro do terminal aparece quando é acessado posições indevidas no vetor ou algo parecido. Meu código está abaixo, acredito que o erro esteja na função fatorial... Quem puder me ajudar, fico MUITO agradecido#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//by Guilherme Giacomin (gz)
void exibir_vetor(int * v){
int i;
for(i=(40000-1) ; i>-1 ; i--){
if(v[i]!=-1)
printf("%d",v[i]);
}
}
int num_digitos(int num){
int i;
int cont=0;
for(i=1; num%i!=num ; i*=10){
cont++;
}
return cont;
}
void soma_vetorial(int * v, int * s){
int i,soma,resto=0;
for(i=0 ; i<40000 ; i++){
soma = v[i] + s[i];
v[i] = soma % 10 + resto;
resto = soma / 10;
if(v[i+1]==-1 || s[i+1]==-1){
if(v[i+1]==-1 && s[i+1]==-1){
if(resto==0)
i=40000; //"break"
else
v[i+1]=0; s[i+1]=0;
}
else if(v[i+1]==-1){
v[i+1]=0;
}
else if(s[i+1]==-1){
s[i+1]=0;
}
}
}
}
void igualar(int * r, int * s){
int i,i1;
for(i=0 ; i<40000 ; i++){
r[i] = s[i];
if(s[i+1]==-1 && r[i+1]==-1){
i=40000; //"break"
}
}
}
void preenche_vetor(int * h,int n){
//Preenche o Vetor 'h' com o valor de 'n'
//Todas as outras posições são preenchidas com -1
int i=0,div=1;
int num=n;
for(; (num%div)!=num ; i++){
h[i]=n%10;
n/=10;
div*=10;
}
for( ; i<40000 ; i++){
h[i]=-1;
}
}
void fatorial(int n,int * v){
int save[40000],fator[40000];
int i,i0,i1,produto,vai1=0;
int digitos,n_und; //n_und : numero na unidade desejada(dezena, centena, ...)
int num;
preenche_vetor(save,1);
preenche_vetor(fator,1);
for(n-=1 ; n>1 ; n--){
igualar(save,v);
num=n;
for(digitos=1 ; digitos<=num_digitos(n) ; digitos++ , num/=10 ){
igualar(fator,save);
n_und = num%10;
if(digitos>1){
for(i0=1 ; i0<digitos ; i0++){ //"arredar" para a esquerda todos os numeros
for(i1=39998 ; i1>=0 ; i1--){ // 'digitos' vezes
if(fator[i1]!=-1)
fator[i1+1]=fator[i1];
}
}
for(i1=0 ; i1<(digitos-1) ; i1++) //Colocar 0's para simular a multiplicação pela
fator[i1]=0; // unidade(centena,milhar,...) em questão
}
for(i=0 ; i<40000 ; i++){
produto = fator[i]*n_und;
fator[i] = (produto+ vai1) % 10 ;
vai1 = (produto+vai1) / 10;
if(fator[i+1]==-1){
if(vai1==0)
i=40000; //"break" no for mais interno
else
fator[i+1]=0; //valor -1 resultaria em erros no cálculo
}
}
if(digitos!=1){
soma_vetorial(v,fator);
}
else{
igualar(v,fator);
}
}
}
}
int main(){
int v[40000];
int n;
printf("Digite um numero inteiro: ");
scanf("%d",&n);
preenche_vetor(v,n);
fatorial(n,v);
printf("Resultado: ");
//exibir_vetor(v);
return 0;
}
tux-gpt - Assistente de IA para o Terminal
Instalação e configuração do Chrony
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
O Que Fazer Após Instalar Ubuntu 25.04
Copiar Layout do Teclado para aplicar em outra Distribuição (6)
Alguém poderia me ajudar a escolher peças pra montar um desktop? [RESO... (34)