数字特征值

对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是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

可以利用数组存储各数字位数以及值,利用for循环进行比较,找相互符合条件的值,再利用二进制进行求和

#include<stdio.h>
#include<math.h>
int main()
{
	int n;
	int a=1, b=10, c, d, e, f=0;
	int s[10];
	int w[10];
	scanf("%d", &n);
	d = n;
	
	while (d>=10)
	{
		d = d / 10;
		a++;
	}
	c = a;
	e = n;
	for ( c = 1; c <= a; c++)
		for (c = 1; c<=a; c++)
	{
		s[c] = e % b;
		e = e / 10;
	}
	for ( c = 1; c <= a; c++)
	{
		if (c % 2 != 0 && s[c] % 2 != 0 || c % 2 == 0 && s[c] % 2 == 0)
		{
			w[c] = 1;
		}
		else
			w[c] = 0;
	}
	for ( c = 1; c <=a; c++)
	{
		if (w[c]!=0)
		{
			f = f + pow(2, (c - 1));
		}
	}
	printf("%d", f);
return 0;
}

运行结果: 

数字特征值