【问题标题】:how to change postition of digits in an integer in c如何在c中更改整数中数字的位置
【发布时间】:2016-06-05 11:12:47
【问题描述】:

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

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

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

【问题讨论】:

  • 注:void main() --> int main(void)
  • 等等!! for (i){}????什么?
  • 没关系,写它并忘记删除它@Sourav Ghosh
  • 我使用 void main 而不是 int main
  • 啊,在清理这个的时候,也请正确缩进你的代码。

标签: c function codeblocks swap digits


【解决方案1】:

试试这个

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

【讨论】:

  • 但是如果我使用一个数组,我就不能返回它,而我必须这样做(返回最终的加密数字)。
  • @AliHaroon 我最后返回了一个整数。
  • 不错的方法实际上从来没有想过将数组和整数的用法结合起来现在就试试看 thx :)
  • 只有一个问题,零是加密数字中的最后一个数字,它没有显示在输出中@Yashwanth Reddy
  • 打印整数时省略前导0。
【解决方案2】:

最简单的解决方案是:

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

【讨论】:

  • @Cherubim 不,一个好的程序是一个易于理解的程序。在某种程度上,更少的行可以使事情更容易理解,因为要理解的东西更少。但是过了那个点,把所有东西都塞在一起只会让事情变得更难理解,而且一点也不“好”。
【解决方案3】:

您可以通过这种方式获取数组来做到这一点:

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

【讨论】:

    【解决方案4】:

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

    n

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

    现在 secDig

    希望对你有帮助。

    所以简单的答案是正确使用按位运算符 > [right-shift] 和 & [ bitwise AND]。

    希望对你有帮助

    【讨论】:

    • 忘了说,您应该使用按位或重新组合这些移位的数字,以生成您需要的新的 4 位数字。
    • C 不使用BCD
    【解决方案5】:

    对 Aleksandar Makragić 的answer 做了一点补充,以在返回值 1234 => 输出:0189 或输入:3333 => 输出:0000:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2015-11-19
      • 2021-04-24
      • 1970-01-01
      相关资源
      最近更新 更多