如何更改c中整数中数字的位置

how to change postition of digits in an integer in c

问题如下: 我需要编写一个函数,它接受一个四位整数,然后以这种方式加密该数字:取每个数字并将其替换为 (c + 7)% 10; 然后将第一个数字与第三个数字交换,第二个数字与最后一个数字交换; 然后 returns 加密的整数。 到目前为止,我已经写了这么多代码:

#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);
}

我得到了正确的转换输出,但我不知道如何交换数字的位置。

试试这个

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];
}

每个数字由 4 位表示。 因此您可以使用移位运算符根据您的要求移动数字。

n << 8 应该将您的第一个数字移到第三个数字的位置

secDig = ((num >> 4 ) & 0x0F) 将给出您的第二个数字

现在 secDig << 12 应该将您的第二个数字移到最后 [即第 4 个数字]

希望对您有所帮助。

所以简单的答案是正确使用按位运算符 << [左移]、>> [右移] 和 & [按位与]。

希望对您有所帮助

你可以这样取一个数组:

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]);
}

最简单的解决方案是:

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;
}

对 Aleksandar Makragić 的 略作补充,以在 return 值 <1000 时考虑前导零,例如输入:1234 => 输出:0189 或者输入:3333 => 输出:0000:

 printf("Output:\t%04d\n", output);