Ir ao conteúdo

Posts recomendados

Postado

No problema 1786 do uri tá pedindo para imprmir o cpf com a saída assim ( vou dar uma saída de exemplo: 000.000.000.21), mas meu código está imprimindo somente 00000000021 (sem os pontos) e não sei como faço para coloca-los. Segue abaixo o código:

#include <stdio.h>



int main {

     long int cpf;

     int cpfaAux, dig, b1 = 0, b2 = 0, i, j;

    scanf("%li", &cpf);

    cpfAux = cpf;

    for(i = 0, j = 1; i >= 0; i--, j++){

        dig = cpf % 10;

        b1 = b1 + (dig * i);

        b2 = b2 + (dig * j);

        cpf = cpf / 10;

   }

   b1 = b1 % 11;

   b2 = b2 % 11;

   
   if (b1 == 0)

       b1 = 0;


   if(b2 == 0)

       b2 = 0;



  cpf = cpfAux;



  for(i = 0; i < 9; i++){

       cpf = cpf / 100000000;

       printf("%li", cpf);

       if(j % 3 == 0 && j < 9)

           printf(".");

       cpf = cpf / 10;

}

 

  • Obrigado 1
Postado

@Ana SM     ali você está multiplicando do último dígito para o começo e teria que ser o contrário , então um vetor seria melhor , e com isso seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
int main(){
    long int cpf;
    int b1=0,b2=0,i,j,h=2,dig[9];  /* vetor para os dígitos            */
    scanf("%li",&cpf);
    for(j=8;j>=0;j--){             /* desmembrar o número em dígitos   */
        dig[j]=cpf % 10;
        cpf/=10;
    }
    for(i=9, j=1; i>0; i--, j++){  /* fazer a soma                     */
        b1+=dig[j-1]*j;
        b2+=dig[j-1]*i;
    }
    b1=(b1 % 11)%10;               /* resto da soma dividido por onze  */
    b2=(b2 % 11)%10;               /* resto da soma dividido por onze  */
    for(i=0; i<9;i++){             /* imprimindo o resultado           */
        printf("%d",dig[i]);
        if(i==h&&h!=8){
            printf(".");
            h+=3;
        }
    }
    printf("-%d%d\n",b1,b2);
    return 0;
}

mas apesar de mostrar o resultado igual ao do uri , ele não foi aceito , com 100 por cento de erro  .

  • Obrigado 1
Postado

@devair1010 Oi, obrigada por me responder. Entendo q com vetor ficaria bemm mais fácil, o problema é que meu professor pediu para que esse algoritmo fosse feito sem usar vetor 

  • Obrigado 1
Postado

@Ana SM    mas que tipo de vetor não pode   ?    se puder usar string , que no  c  é na verdade um vetor de caracteres , então seria como se fosse vetor , você usaria os caracteres da string , convertendo eles em int  e faria os cálculos do mesmo jeito .

  • Obrigado 1
Postado

Olá todos!

 

Em 01/09/2019 às 10:16, devair1010 disse:

mas que tipo de vetor não pode   ?

Acredito que todos.

 

Em 01/09/2019 às 08:35, Ana SM disse:

Entendo q com vetor ficaria bemm mais fácil, o problema é que meu professor pediu para que esse algoritmo fosse feito sem usar vetor 

Use pois então 4 variáveis para cada conjunto de dígitos e aplique a formatação na saída.

 

cpf_format.c

#include <stdio.h>
int main (void)
{   int cent0; /*< 3 primeiro dígito do CPF */
    int cent1; /*< 3 penúltimo dígito do CPF */
    int cent2; /*< 3 último dígito do CPF */
    int dizi0; /*< 2 dígito verificador de CPF */


    fscanf (stdin," %3d%3d%3d%2d",&cent0,&cent1,&cent2,&dizi0);
    /* Ler 11 números sequenciados na entrada padrão e rearranja eles 
     * em 4 variáveis de mesmo tipo.
     *
     * stdio.h
     * Referência: http://www.cplusplus.com/reference/cstdio/fscanf
     */
    
    fprintf (stdout,"%03d.%03d.%03d-%02d\n",cent0,cent1,cent2,dizi0);
    /* Exibir 11 números na sequência formatados no padrão de CPF.
     *
     * stdio.h
     * Referência: http://www.cplusplus.com/reference/cstdio/printf/
     */

return 0;
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...