码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ZJU-199001 第三周练习 2 数字特征值 位运算算法


    题目

    对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值. 对于一个整数, 从个位开始对每一位数字编号, 个位是 1" role="presentation">11 号, 十位是 2" role="presentation">22 号, 以此类推. 这个整数在第位上的数字记作 x" role="presentation">xx, 如果 x" role="presentation">xx 和 n" role="presentation">nn 的奇偶性相同, 则记下一个 1" role="presentation">11, 否则记下一个 0" role="presentation">00. 按照整数的顺序把对应位的表示奇偶性的 0" role="presentation">00 和 1" role="presentation">11 都记录下来, 就形成了一个二进制数字. 比如, 对于 342315" role="presentation">342315342315, 这个二进制数字就是 001101" role="presentation">001101001101.

    代码

    #include 
    
    int main() {
        int n;
        scanf_s("%d", &n);
    
        int e = 0;
        for (int i = 0; n; i++) {
            e ^= (n + i & 1) << i;
            n /= 10;
        }
    
        printf("%d", e);
    
        return 0;
    }
    

    解析

    要获取一个数字 x" role="presentation">xx 第 n" role="presentation">nn 位的奇偶, 只需要除以 10n−1" role="presentation">10n−110n−1. int 的特性将使结果向下取整, 例如: 342315/101=34231" role="presentation">342315/101=34231342315/101=34231, 我们仅需要关注结果的个位数即可. 同时, 奇偶性相同的数字相加, 结果为偶数; 反之为奇数. 计 x" role="presentation">xx 从左数第一位到右数第 n" role="presentation">nn 位, 与数位相加, 即可分析奇偶性.

    此处, 我们有两种判断奇偶的方法:

    1. 使用整除运算符 %, 偶数结果为 0.
    2. 与 1 进行按位与操作 (原理见此处), 偶数结果为 0. 本代码使用此种算法.

    Tip: 加和结果为偶数时结果为 1 会更方便, 因此 for 循环中的 i 从 0 开始计数.

    我们知道, 位运算中的左移的效果是乘二, 因此, 我们将上述过程中得到的 0 或 1 进行左移, 偏移量即目前所在的数位. 如此, 我们不必再去调用 pow() 函数.

    当然, 你也可以设置一个值 pow2, 在每次循环末翻倍, 加上之前提到的整除法判断奇偶, 你的代码大致如下.

    int e = 0;
    int pow2 = 1;
    for (int i = 0; n; i++) {
        e ^= (n + i) % 2 * pow2;
        n /= 10;
        pow2 *= 2;
    }
    
  • 相关阅读:
    关于k8s的pvc存储卷
    2021Java面试题及答案整理(最新汇总版)
    IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘t_user‘ 中的标识列插入显式值
    贪心 Leetcode 968 监控二叉树
    【滤波跟踪】基于matlab Huber函数和最大相关熵的抗差滤波算法GNSS导航定位粗差处理【含Matlab源码 2129期】
    如何使用Spring和Thymeleaf轻松地在HTML表单映射上显示多个复选框
    想做游戏翻译员,需要具备什么能力呢?
    黑马C++ 03 提高4 —— STL常用容器_string容器/vector容器/deque容器
    C语言个人帐本管理系统
    利用云服务器搭配宝塔面板解禁网易云
  • 原文地址:https://www.cnblogs.com/zipfried/p/zju199001_week4_b.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号