对数字求奇偶特征值(java实现)

该博客介绍了如何用Java实现对数字求奇偶特征值的算法。通过从个位开始判断数字和位数的奇偶性,形成二进制数字,然后将其转换为十进制值。文章提供了一段代码示例,其中包括使用StringBuilder、递归函数print()、字符串翻转以及Integer.parseInt()方法。作者在代码中遇到了一个问题,当不定义额外的字符串变量时,无法正确将二进制字符串转换为十进制数。

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

这是我在mooc上浙大的java入门课上看到的一个题目,觉得挺适合练手,把我的答案挂出来,希望有些地方能给其他小伙伴以启发,也有很多不足的地方,希望有大神多多指正。题目如下:

数字特征值(5分)
题目内容:

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

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

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

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

输入格式:

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

输出格式:

一个整数,表示计算结果。

输入样例:

342315

输出样例:

13

import java.math.BigInteger;
import java.util.Scanner;
/*
本演示代码是为了求数字的奇偶特征值,输入一串数字,输出一串二进制数字表示的特征值。
本代码实现的功能有:
1.使用了StringBuilder类及append()方法。
2.定义了print()递归函数。
3.使用了翻转字符串的方法reverse(),实现了"abc"–>“cba”。
4.使用了Integer包装类型及ParseInt()方法,实现了将字符串类型的二进制数字,如"001101",转换成int类型的十进制数。
*/
public class Demo003
{
static boolean bl = true;
static int i = 0;
static StringBuilder sb = new StringBuilder(1024); // 1
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int input = in.nextInt();
while (bl)
{
print(input);
}
}

static void print(int N)
{
    i += 1;
    int x = N % 10;
    if ((i % 2) == (x % 2))
    {
        sb.append(1);               // 1
    }
    else
    {
        sb.append(0);
    }
    if (N > 9)
    {
        System.out.println(x);
        print(N / 10);              // 2
    }
    else
    {
        System.out.println(N);
        String s = sb.reverse().toString();		//***
        System.out.println(s);
        System.out.println(change(s));
        bl = false;
    }
}

static int change(String st)
{
    return Integer.parseInt(st, 2);
}

}

不过作者有一事不明,在我标***号的那一行代码,如果我不定义String s,而是把后面的代码改写为System.out.println(sb.reverse().toString()); System.out.println(change(sb.reverse().toString()));最后字符串String st将不能被正确地转换为十进制数字。比如我输入原题的342315,得到字符串001101,最后转换得到的数字居然是44…作为一个初学编程的小白真的赶脚编程是一门玄学ヾ(>Д<;))))… 逃~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值