2016-06-05 2 views
-1

Le problème est le suivant: Je dois écrire une fonction qui prend un entier à quatre chiffres, puis crypte le nombre de cette manière: prendre chaque chiffre et le remplacer par (c + 7)% 10; puis permutez le premier chiffre avec le troisième et le second avec le dernier chiffre; , puis renvoie l'entier chiffré. J'ai réussi à écrire autant code jusqu'ici:comment modifier la postition de chiffres dans un entier en c

#include<stdio.h> 
#include <stdlib.h> 
#define N 100 


int encrypt(int a){ 
    int n=0,i; 
    for (i=0;i<4;i++){ 
    n = a%10; 
    a = a/10; 
    n = (n+7)%10; 
    } 
} 


void main() 
{ 
    int a; 
    printf("Enter the four digit integer: "); 
    scanf("%d",&a); 
    encrypt(a); 
} 

Je reçois une sortie correcte pour la conversion, mais je ne sais pas comment échanger la position de chiffres.

+2

Note: 'void main()' - -> 'int main (void)' –

+1

attendez !! 'pour (i) {}' ???? quelle? –

+0

peu importe qui l'a écrit et a oublié de l'enlever @Sourav Ghosh –

Répondre

1

La solution la plus simple serait:

int encrypt(int value) { 

    int first = value/1000; 
    int second = (value/100) % 10; 
    int third = (value/10) % 10; 
    int fourth = value % 10; 

    first = (first + 7) % 10; 
    second = (second + 7) % 10; 
    third = (third + 7) % 10; 
    fourth = (fourth + 7) % 10; 

    return third * 1000 + fourth * 100 + first * 10 + second; 
} 
+0

C'est vraiment facile à comprendre!Mais sur une note générale beaucoup disent qu'un bon programme est un programme avec moins de lignes – Cherubim

2

essayer ce

int encrypt(int num) { 
    int arr[4]; 
    int i = 0; 
    arr[0] = (num/1000); 
    arr[1] = (num/100) % 10; 
    arr[2] = (num/10) % 10; 
    arr[3] = num % 10; 
    for (; i < 4; i++) { 
     arr[i] = (arr[i] + 7) % 10; 
    } 
    return arr[2] * 1000 + arr[3] * 100 + arr[0] * 10 + arr[1]; 
} 
+0

mais si j'utilise un tableau, je ne peux pas le renvoyer alors que je suis obligé de le faire (ce qui renvoie le nombre chiffré final). –

+0

@AliHaroon J'ai renvoyé un entier à la fin. –

+0

belle méthode en fait jamais pensé de combiner l'utilisation d'un tableau et entier va essayer maintenant thx :) –

1

chaque chiffre est représenté par 4 bits. de sorte que vous pouvez utiliser l'opérateur de décalage de bits pour déplacer les digistes selon vos besoins.

n < < 8 devrait passer votre première digist à la place du troisième chiffre

secDig = ((num >> 4) & 0x0F) donnera à votre deuxième chiffre

maintenant secDig < < 12 devrait déplacez votre deuxième chiffre pour durer [ie 4ème chiffre]

J'espère que ça aide. La réponse simple est d'utiliser les opérateurs bit à bit < < [left shift], >> [right-shift] et & [bitwise AND] correctement.

Hope it helps

+0

oublié de mentionner, vous devez utiliser OU bit à bit pour reesseble ces chiffres décalés pour faire le nouveau numéro à 4 chiffres dont vous avez besoin. – George

1

Vous pouvez le faire en prenant un tableau de cette façon:

int encrypt(int a) 
{ 
    int i,x[4]; 
    for (i=0;i<4;i++) 
    { 
     x[i]=((a%10)+7)%10; 
     a=a/10; 
    } 
    return x[2]+(10*x[3])+(100*x[0])+(1000*x[1]); 
}