zoukankan      html  css  js  c++  java
  • 数字特征值

    题目内容:

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

    这里的计算可以用下面的表格来表示:

    数字

    3

    4

    2

    3

    1

    5

    数位

    6

    5

    4

    3

    2

    1

    数字奇偶

    数位奇偶

    奇偶一致

    0

    0

    1

    1

    0

    1

    二进制位值

    32

    16

    8

    4

    2

    1

    你的程序要读入一个非负整数,整数的范围是[0,1000000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

    提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

     

    输入格式:

    一个非负整数,整数的范围是[0,1000000]。

    输出格式:

    一个整数,表示计算结果。

    输入样例:

    342315

    输出样例:

    13

    时间限制:500ms内存限制:32000kb
     
    答案:

    #include<stdio.h>
    #include<math.h>
    int main(){
      int a;
      int n=0;
      int dig,mask;
      int t=0,reg=0;
      // 0-1000000
      scanf("%d",&a);
      //a=342315;
      //a=5;
      while(a>0&&a<=1000000){
        if(a!=0){
          dig=a%10;
          a/=10;
          n++;

          if(dig%2==0){
            mask=1;//这一位是偶
          }else{
            mask=-1;//这一位是奇
          }
          if(mask==pow(-1,n)){
          t=pow(2,n-1);
          reg+=t;
          }

    }
    printf("%d",reg);

    return 0;
    }

    思路:

    1.输入一个数字,要把它的每一位都取出来(需要使用循环,先dig=a%10,再a/=10抹掉最右位,当a=0时停止循环),用dig变量保存,还要判断它的位数,这里需要一个计数器,用变量n来保存,首先初始化为0;

    2.用变量mask=-1表示dig为奇数,mask=1来表示dig为偶数,用if(mask==pow(-1,n)){}来判断dig与它对应的数字(有一个特性:个位数为奇数,十位数为偶数,百位数为奇数......)的奇偶性是否相同;

    3.t变量类似dig来保存2进制数的每一位表示的十进制数,t=pow(2,n-1);

    4.reg变量初始化为0来保存结果,reg+=t。

  • 相关阅读:
    Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用"轨道一次写入"还是"光盘一次写入"?
    日本比中国快一个小时,泰国比中国慢一个小时
    轻量级微服务全局架构图-来自于黄勇老师
    2018-2-13-win10-uwp-读写csv-
    2018-8-28-win10-uwp-MVVM入门
    2018-12-25-win10-uwp-显示SVG
    2018-8-27-C#-powshell-调用
    2019-9-2-visual-studio-2015-warning-MSB3246
    2018-10-2-win10-uwp-win2d-特效
    2019-9-2-生成密码
  • 原文地址:https://www.cnblogs.com/zhhjthing/p/7711447.html
Copyright © 2011-2022 走看看