(C语言)判断一个数是否是对称数(逆置)

题目:输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;

例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no

核心思想:将一个数进行逆置,例:1234         逆置后为:4321

  1.  将数据a的数值剥离出来  `a=a/10`
    操作:不断除以10,直至不为0(为0跳出循环)
    例:1234        不断除以10:        1        2        3        4
  2. 把a剥离出来的数值从右往左组成一个新数值b
    思想:使其右边变为最高位,使其左边变为最低位 `b=b*10+c`
    #include <stdio.h>
    //判断对称数
    int main() {
       int a;
       scanf("%d",&a);//输入一个整型数据a
       int ai,b=0,c;
       ai=a;        //备份a
       while(a)
       {
           c=a%10;  //余数
           b=b*10+c;    //把b原有的值乘以10再加上余数
           a=a/10;
       }
       if(b==ai)
       {
           printf("yes\n");
       }
        else
       {
           printf("no\n");
       }
       return 0;
    }

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DES是一种对称分组加密算法,其加密和解密过程使用相同的密钥。下面是用C语言实现DES对称分组加密/解密算法的步骤: 1. 定义密钥 DES算法使用56位的密钥,但是由于每个字节的最高位都是奇偶校验位,因此实际上只有48位是用于加密的。在C语言中,可以使用unsigned char类型的组来表示密钥,例如: ```c unsigned char key[8] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; ``` 2. 初始置换 DES算法将64位的明文分成左右两个32位的部分,然后进行初始置换,将明文的每一位按照一定的规律重新排列。在C语言中,可以使用unsigned char类型的组来表示明文,例如: ```c unsigned char plaintext[8] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; ``` 3. 迭代加密/解密 DES算法将明文分成左右两个32位的部分,然后进行16轮的迭代加密/解密。在每一轮中,右半部分的32位和一个48位的子密钥进行异或运算,得到一个32位的结果,然后将左右两部分交换。在C语言中,可以使用unsigned int类型的变量来表示32位的据,例如: ```c unsigned int left = 0x01234567; unsigned int right = 0x89ABCDEF; ``` 4. 逆置换 DES算法将最后一轮迭代加密/解密得到的左右两部分按照一定的规律进行逆置换,得到最终的密文。在C语言中,可以使用unsigned char类型的组来表示密文,例如: ```c unsigned char ciphertext[8] = {0x85, 0xE8, 0x4D, 0x4E, 0x67, 0x6F, 0x04, 0x3C}; ``` 以上是DES算法的基本流程,具体实现需要涉及到一些细节问题,例如如何生成子密钥、如何进行异或运算、如何进行置换等等。如果需要实现DES算法,建议参考DES算法的标准实现,例如OpenSSL库中的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青寒whale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值