题目:
2数字特征值(5分)
题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。
我的做法:
#include<stdio.h>
int main()
{
int in,sz,sw,gn,ys,sjz=0,n=1,fz=0;
scanf("%d",&in);
gn=in;
while(gn!=0)
{
ys=gn%10;
sz=ys%2;
sw=++fz%2;
if(sw==sz)
{
sjz=sjz+n;
}
n=2*n;
gn/=10;
}
printf("%d",sjz);
return 0;
}
他山之石(转自网友ikeltis):
#include<stdio.h>
int main()
{
int n=1;
int h=1;
int num;
int flag=0;
scanf("%d",&num);
while(num != 0)
{
if((num+n)%2==0)
{
flag = flag + h;
}
n++;
num = num / 10;//删去最后一位数
h=h*2;
}
printf("%d\n",flag);
return 0;
}
思考:
ikeltis的程序比我好的地方是在于找到了奇数加奇数为偶数,偶数加偶数为偶数,奇数加偶数为奇数的特点,直接求出十进制的数字特征。多学习学习数字之间的关系然后在作程序。