欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字特征值

程序员文章站 2022-04-03 22:34:41
...

题目来源:中国大学MOOC——零基础学JAVA语言
数字特征值
输入格式: 一个非负整数,整数的范围是[0,1000000]。
输出格式: 一个整数,表示计算结果。
输入样例: 342315
输出样例: 13

一开始看到这一题,题目又长内容又多就不想做了,拖了好几天,最后下决心好好看看题目,发现其实并不难(方法总比困难多),之前是因为看视频,老师没有用数组解决,然后做题时就卡在这里了,因为我只想到了用数组来解决这个问题,如果不用数组,那我暂时还真想不出怎么解决。
我的解题思路:创建三个数组,分别用于存放数字、数位、以及奇偶一致,由于用到数组,所以还需要一个count变量来统计数字的数位,比如说:123是3位数,那么count = 3,这个变量用于控制循环次数(计算二进制)。

package www.zhejiang.test03;

import java.util.Scanner;

/**
 * @创建人 wuzengyu
 * @创建时间 2019/10/16
 * @描述
 */
public class Main {
    public static void main(String[] args) {
        int num;
        int[] digits = new int[7];      // 有效数位
        int[] numbers = new int[7];     // num个位
        int[] oddAndEven = new int[7];  // 奇偶数
        Scanner sc = new Scanner(System.in);
        while (true)
        {
             num = sc.nextInt();
            if ((num >= 0) && (1000000 >= num))
            {
                break;
            }
            else
            {
                System.out.println("请输入正确数字!");
            }
        }

        int count = 0;  // 计算输入数字的个数

        for (int i = 0; i < 7; i++)
        {
            int digit = num % 10;   // 得到个位
            numbers[i] = digit;     // 放入数组
            digits[i] = i + 1;
            count++;
            if (num >= 0 && num <= 9)
            {
                break;
            }
            num = num / 10;         // 去掉个位

        }

        System.out.println("输入数字的数位:" + count);
        System.out.print("数字:");
        for (int i : numbers)
        {
            System.out.print(" " + i);
        }
        System.out.println();
        System.out.print("数位:");
        for (int j : digits)
        {
            System.out.print(" " + j);
        }

        // 计算奇偶一致性,奇偶一致则为0
        for (int i = 0; i < numbers.length; i++)
        {
            if ((numbers[i] % 2 == 0 && digits[i] % 2 ==0) || (numbers[i] % 2 == 1 && digits[i] % 2 == 1))
            {
                oddAndEven[i] = 1;
            }
        }

        System.out.println();
        System.out.print("奇偶:");
        for (int k: oddAndEven)
        {
            System.out.print(" " + k);
        }

        num = 0;    // 重置为0,用于保存数字特征值
        for (int i = 0; i < count; i++)
        {
            if (oddAndEven[i] != 0)
            {
                num += (int)(Math.pow(2,i));
            }
        }
        System.out.println();
        System.out.println("数字特征值:" + num);

    }
}

运行结果:
数字特征值
虽然运行的结果正确,但是可看出程序存在的缺陷,如果你有更优的方案,请在下方留言吧~