题目来源:中国大学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);
}
}
运行结果:
虽然运行的结果正确,但是可看出程序存在的缺陷,如果你有更优的方案,请在下方留言吧~