ex9

2020-03-03  本文已影响0人  lemon_crystal

数字特征值

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

按照二进制位值将1的位的位值加起来就得到了结果13。

你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

输入格式
一个非负整数,整数的范围是[0,1000000]。

输出格式
一个整数,表示计算结果。

输入样例
342315

输出样例
13

算法设计
1.获得用户输入input
2.x = Input%10获得input每一位上的数字
3.令n初始化为1,来表示当前为第n位
4.令n_k = n % 2来表示n的奇偶性
5.同理x_k = x % 2表示x的奇偶性
6.使用if函数,条件为n_k == x_k,若相等赋值p=1,不相等赋值p=0
7.令bin = bin+p10^(n-1)来得到二进制数值
8.n++每循环一次,n要挪动一位
9.以上内容放到do while循环中,条件是input != 0
此时已经获得输入转化的二进制数,下一步需要将其转化为十进制数
10.令q = bin%10返回二进制数每一位上的数字
11.bin = bin/10每一次循环需要将bin各位的数字划掉
12.dec = dec + q
2^(n-1)获得对应的十进制数
13.以上三步放进dowhile循环中,条件是bin!=0
14.输出dec
程序如下

import java.util.Scanner;

public class ex9 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
int Input;   /*获得用户输入*/
int x;       /*第n位的数字*/
int n = 1;   /*第n位*/
int n_k;     /*n的奇偶性*/
int x_k;     /*x的奇偶性*/
int p;       /*根据奇偶性是否相等得到的0/1*/
int bin = 0; /*创建的二进制值*/
int q;       /*bin的每位数值*/
int dec = 0;     /*根据bin换算的十进制数值*/
int j = 1;   /*生成十进制数值时的计数值*/
Scanner in = new Scanner(System.in);
Input = in.nextInt();
do
{
    x = Input % 10;
    Input = Input / 10;
    n_k = n % 2;
    x_k = x % 2;
    if(n_k == x_k)
    {
        p = 1;
    }
    else
    {
        p = 0;
    }
    bin = (int) (bin + p * Math.pow(10, n - 1));
    n++;
}while(Input != 0);
//System.out.println(bin);
do
{
    q = bin % 10;
    bin = bin / 10;
    dec = (int) (dec + Math.pow(2, j - 1) * q);
    j++;
}while(bin != 0);
System.out.println(dec);
    }

}

注意
1.在解决复杂问题时,要从局部到整体思考,在本题中,首先思考如何得到input
每一位数字以及位数,之后是如何获得并比较他们的奇偶性,根据他们的结果输出bin,再然后是使用何种循环,循环条件如何设置,等等。首先要从容易解决的局部问题中入手。
2.在构思方案时要遵循变量-算法-流程图-程序的思路去解决问题
3.编程时要分区清晰,首先是定义所有需要用到的变量,之后是具体程序,使用缩进区分循环和判断的嵌套
4.在编程时要添加必要注释,确保在第二次编程时可以进入工作,省去阅读代码的时间

上一篇 下一篇

猜你喜欢

热点阅读