数字特征值(5分)
题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。
这里的计算可以用下面的表格来表示:
按照二进制位值将1的位的位值加起来就得到了结果13。
你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。
提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。
输入格式:
一个非负整数,整数的范围是[0,100000]。
输出格式:
一个整数,表示计算结果。
输入样例:
342315
输出样例:
13
我的答案:
import
java.util.Scanner;
public
class
Main {
public
static
void
main(String[] args) {
//
TODO Auto-generated method stub
Scanner in
=
new
Scanner(System.in);
int
OneNumber
=
in.nextInt(); in.close();
int
count
=
0
;
//
位数计数
int
Yushu;
//
余数
int
k,i,j,x
=
0
;
//
i 余数标志,j 位数标志,k 奇偶一致性, x 该二进制数代表的十进制数
int
c
=
1
;
do
{ Yushu
=
OneNumber
%
10
; OneNumber
=
OneNumber
/
10
; count
=
count
+
1
;
if
(Yushu
%
2
==
0
) { i
=
1
; }
else
{ i
=
0
; }
if
(count
%
2
==
0
) { j
=
1
; }
else
{ j
=
0
; }
if
( i
-
j
==
0
) { k
=
1
; }
else
{ k
=
0
; } x
=
x
+
k
*
c; c
=
c
*
2
;
//
System.out.println("count=" + count + ",OneNumber=" + OneNumber + ",数字为" + Yushu + ",i=" + i + ",j="
//
+j +",k=" +k + ",x= " +x);
}
while
( OneNumber
>
0
); System.out.println(x); } }