首页 > 编程知识 正文

牛客企业版,牛客强制交卷

时间:2023-05-06 04:08:29 阅读:225631 作者:4203

链接:
原题
来源:牛客网

题目

输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。

输入描述:

输入包括一个字符串,字符串长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据,对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。

示例1
输入

33a

输出

101100111011001101100001 分析

题目的难点不是算法,而是审题。我当时做的时候一下懵了,3的奇校验,自然就想到将3转换为二进制 0011 。但这是四位,那么我们补上4个零,0000 0011 。奇校验需要保证最后的1的个数为奇数。当我们发现1的个数是偶数2,那么即使加上1也不是示例的答案。

后来想到了ASCII码,但就脑子里过了一下就去做其他题了。最后经过查阅确实是先将3转换为ASCII码,然后再将对应的ASCII码值转换为二进制,最后再进行奇校验。

观察后,我们会发现示例中的答案是将添加的校验位放到了最高位上 。

十进制ASCII码二进制奇校验后3510011 00111011 0011a970110 00010110 0001

知道了原由,代码其实不难

代码 import java.util.Scanner;public class Main{ //处理的方法 public static void process(String s){ char[] chars = s.toCharArray(); for(int i = 0;i < chars.length;i++){ //将字符转换为ASCII码值 int a = chars[i] - 0; //获得二进制串 StringBuilder binary = new StringBuilder(Integer.toBinaryString(a)); if(binary.length() < 8){ int len = 8 - binary.length(); for(int j = 0;j < len;j++){ binary.insert(0,"0"); } } //统计字符串中的1的个数 int count = 0; for(int j = 0;j < binary.length();j++){ if(binary.charAt(j) == '1'){ count++; } } if(0 == count % 2){ //偶数需要将最高位填个1 System.out.println("1"+binary.substring(1)); }else{ System.out.println(binary); } } } //主方法 public static void main(String[] args){ //输入流 Scanner in = new Scanner(System.in); while(in.hasNextLine()){ String s = in.nextLine(); process(s); } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。