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

你的程序要读入一个非负整数,整数的范围是[0,1000000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。
提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。
输入格式:
一个非负整数,整数的范围是[0,1000000]。
输出格式:
一个整数,表示计算结果。
输入样例:
342315
输出样例:
13
思路
可以看出需要较多的变量来分别保存以下信息:
int x; //输入的整数
int digit; //每次取输入的最后一位数字
int num = 0; //数位:个位、十位、百位...
int same; //数字与数位奇偶一致性
int c = 1; //当前二进制位值
int ret = 0; //最终结果
根据题意可以写出代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int x; //输入的整数
int digit; //每次取输入的最后一位数字
int num = 0; //数位:个位、十位、百位...
int same; //数字与数位奇偶一致性
int c = 1; //当前二进制位值
int ret = 0; //最终结果
scanf("%d", &x);
while (x > 0) {
digit = x%10;
num += 1;
//数字数位奇偶一致性:如果都为奇或偶,则加起来为偶数,%2=0。否则加起来为奇数,%2!=0。
same = (digit+num)%2 == 0? 1:0;
ret += same*c;
c *= 2;
x/=10;
}
printf("%d\n", ret);
return 0;
}
结果
运行,输入342315,结果为13,正确。

该文章介绍了如何通过奇偶特征值对整数进行编码,详细阐述了算法思路,并提供了C语言实现代码。输入一个非负整数,程序计算其奇偶特征的二进制表示,并将其转换为十进制输出。例如,输入342315,输出结果为13,验证了算法的正确性。

1122

被折叠的 条评论
为什么被折叠?



