Java-数字特征值(Mooc-零基础学Java语言)课程学习作业

这篇博客介绍了如何使用Java计算一个整数的奇偶性特征值,该特征值是通过判断每位数字与位数奇偶性匹配情况形成的二进制数字,再转换成十进制。例如,数字342315的特征值为001101,对应的十进制值为13。文章提到了两种计算方法,一种是手动计算,另一种是利用Java的Math.pow()函数。示例代码展示了如何运用Math.pow()函数解决这个问题,强调了在使用该函数时辅助变量的初始化注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.2 数字特征值

题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。

这里的计算可以用下面的表格来表示:
在这里插入图片描述
按照二进制位值将1的位的位值加起来就得到了结果13。

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

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

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

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

输入样例:
342315

输出样例:
13

import java.util.Scanner;

public class Digit {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int number;
		number = in.nextInt(); //输入的数值
		int digit = 0;
		int count = 0; //表示数位
		int result = 0; //表示结果
		int a, b=1;
		if (number >= 0 && number <= 1000000 )// 判断number的范围
		{
		do {
			digit = number % 10; //取余,即依次从最后一位取出数值
			number = number / 10; //依次去掉最后一位
			count = count + 1; //数位+1
			if (digit%2 == count%2) //判断数字与数位的奇偶性是否相等
			{
				a=1;                //奇偶性相同则记为1
			}else
			{
				a=0;				//奇偶性不同则记为0
			}
			result = result+a*b; //将本次结果累加
			b = b *2; //数位每次加1,而二进制值每次乘2
		}while(number > 0);	//判断是否还有数字进行下一轮循环
		}
		System.out.println(result);
	}

}

除此之外,还可以使用Java Math.pow() 的方法:java.lang.Math.pow() 方法用于返回第一个参数的第二个参数次方。pow() 方法的返回类型为double

  • 语法:
    public static double pow(double a, double b)
  • 参数:
    a:基数; b:指数。
  • 返回值:
    此方法返回的值a^b。
    ①如果第二个参数为正零或负零,则此方法将返回1.0。
    ②如果第二个参数不是数字(NaN),则此方法将返回NaN。
    ③如果第二个参数为1,则此方法将返回与第一个参数相同的结果。

使用**Math.pow()**函数进行处理,则代码如下:(这里需要注意由于应用了指数函数,所以这里的辅助变量 b的初始值应为0,而上面的方法里辅助变量 b初始值是1)

import java.util.Scanner;

public class Digit {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int number;
		number = in.nextInt(); //输入的数值
		int digit = 0;
		int count = 0; //表示数位
		int result = 0; //表示结果
		int a, b=0;
		if (number >= 0 && number <= 1000000 )// 判断number的范围
		{
		do {
			digit = number % 10; //取余,即依次从最后一位取出数值
			number = number / 10; //依次去掉最后一位
			count = count + 1; //数位+1
			if (digit%2 == count%2) //判断数字与数位的奇偶性是否相等
			{
				a=1;                //奇偶性相同则记为1
			}else
			{
				a=0;				//奇偶性不同则记为0
			}
			result = result+a*(int)(Math.pow(2, b)); //将本次结果累加
			b = b + 1 ; //数位每次加1,而二进制值每次乘2
		}while(number > 0);	//判断是否还有数字进行下一轮循环
		}
		System.out.println(result);
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值