Transformação de código

1. Transformação de código

Vinicius S
negolouco

(usa Ubuntu)

Enviado em 09/12/2017 - 02:20h

Gostaria de saber como transformar esse código que está em C++ em C.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MAXN 1000001

char input [10];
int insize = 0;
bool primo[MAXN];

void sieve(){
memset(primo, 1, sizeof(primo));
long long int l = sqrt(MAXN);
primo[1] = 0;
primo[2] = 1;
for(long long int i = 2; i < MAXN; i++){
if(primo[i]){
for(long long int j = i*2; j <= MAXN; j+=i)
primo[j] = 0;
}
}
/*
for(int i = 1; i < l; i++)
printf("%d ", primo[i]);
printf("\n"); */
}



int pd[7][7];
int calc(int o, int d){
// printf("%d %d\n", o, d);
if(pd[o][d] != -1) return pd[o][d];
if(input[o] == '0') return pd[o][d] = 0;
long long int tmp = 0;
for(int i = d, p = 0; i >= o; i--, p++)
tmp += pow(10, p) *(input[i]-'0');


// printf("primo[%lld]=%d\n", tmp, primo[tmp]);

if(primo[tmp] == 1)
return pd[o][d] = 1;

// printf("aq\n");
for(int i = o; i < d; i++){
if(calc(o, i) && calc(i+1, d))
return pd[o][d] = 1;
}
return pd[o][d] = 0;
}

int main(){
sieve();
int n;
scanf("%d", &n);
while(n--){
scanf("%s", input);
insize = strlen(input);

memset(pd, -1, sizeof(pd));

if(calc(0, insize-1))
printf("sim\n");
else printf("nao\n");
}

return 0;
}



  


2. Re: Transformação de código

Perfil removido
removido

(usa Nenhuma)

Enviado em 09/12/2017 - 15:30h

@negolouco não há necessidade de "conversão" o codigo é muito mais proximo de c puro do que c++, só falta os cabeçalhos ou alguns macros, é só adicionar o seguinte no topo do codigo:
#include <stdbool.h> 

ou
#define bool int
#define TRUE 1
#define FALSE 0




3. Não foi...

Vinicius S
negolouco

(usa Ubuntu)

Enviado em 11/12/2017 - 10:56h


#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

tmp += pow(10, p) *(input[i]-'0');


Fiz do jeito que pediu mas exibi o seguinte erro
error:
/tmp/ccWIcDDG.o: na função `calc':
primos1.c:(.text+0x174): referência indefinida para `pow'
collect2: error: ld returned 1 exit status
sendo que o pow não está errado já que pow(base, expoente);



4. Re: Transformação de código

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/12/2017 - 11:37h

A falta de pow() é porque você não está incluindo a biblioteca matemática na hora de invocar o linker. Acrescente a opção “-lm” ao invocar o comando que produz a versão executável do programa (gcc ou ld).

Contudo, você seguramente não precisa de pow() no seu programa. Em vez de converter a string da direita para a esquerda, converta-a da esquerda para a direita.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts