一.题目要求
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。
对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。
这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。
并把得到的二进制转换成十进制
比如,对于342315,这个二进制数字就是001101。他的十进制就是13。
二.代码演示
#include<stdio.h>
int main()
{
int count=0; //移位计数
int odd;
int num;
int sum=0;
int mk;
scanf("%d",&num);
while(num>0)
{
odd=num%10; //取出最后一位
num=num/10; //减去一位过后的整数
count++; //移动一位就加一次
int t=count; //用来接收移动位数方便后面进行2进制求和
int m=1;
if(odd%2==0&&count%2==0) //判断是不是都是偶数
{
mk=1; //如果是就将该位,置1
}
else if(odd%2!=0&&count%2!=0) //判断是不是都是奇数
{
mk=1; //如果是就将该位,置1
}
else
{
mk=0; //其他情况通通都,置0
}
for(;t>1;t--) //求出该位置在二进制中表示多少
{
m=2*m; //循环结束得到这个二进制值
}
sum=sum+m*mk; //求和计算
}
printf("%d",sum);
}
三.期望
欢迎在慕课上学习的小伙伴能来一起交流学习,我这个代码只是能通过慕课编译,其实还是有很多问题,引入太多变量,感觉还是很复杂,希望发现的小伙伴帮我指正我们一起进步。可以将更优的代码放评论区或者私信我哦。