題目內容:
對數字求特征值是常用的編碼算法,奇偶特征是一種簡單的特征值。對于一個整數,從個位開始對每一位數字編號,個位是1號,十位是2號,以此類推。這個整數在第n位上的數字記作x,如果x和n的奇偶性相同,則記下一個1,否則記下一個0。按照整數的順序把對應位的表示奇偶性的0和1都記錄下來,就形成了一個二進制數字。比如,對于342315,這個二進制數字就是001101。
按照二進制位值將1的位的位值加起來就得到了結果13。
你的程序要讀入一個非負整數,整數的范圍是[0,100000],然后按照上述算法計算出表示奇偶性的那個二進制數字,輸出它對應的十進制值。
提示:將整數從右向左分解,數位每次加1,而二進制值每次乘2。
輸入格式:
一個非負整數,整數的范圍是[0,1000000]。
輸出格式:
一個整數,表示計算結果。
輸入樣例:
342315
輸出樣例:
13
時間限制:500ms內存限制:32000kb
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int data=in.nextInt();
int[]number=new int[7];
int[]reNumber=new int[7];
int sum=0;
int count=0;
int temp=0;
for(int i=4;i<11;i++) {
number[i-4]=(int) (data%Math.pow(10, i-3)/Math.pow(10, i-4));
// System.out.print(number[i-4]);
}
// System.out.println();
for(int i=0;i<7;i++) {
if((number[i]%2==0&&(i+1)%2==0)||(number[i]%2!=0&&(i+1)%2!=0)) {
reNumber[i]=1;
// System.out.print(reNumber[i]);
}
else if((number[i]%2==0&&(i+1)%2!=0)||(number[i]%2!=0&&(i+1)%2==0)) {
reNumber[i]=0;
// System.out.print(reNumber[i]);
}
}
// System.out.println();
for(int i=0;i<7;i++) {
sum=(int) (sum+number[i]*Math.pow(10, i));
}
while(sum>0) {
sum=sum/10;
count++;
}
for(int i=0;i<count;i++) {
temp=temp+(int) (reNumber[i]*Math.pow(2, i));
}
System.out.println(temp);
in.close();
}
}