2301_79810963 2023-11-21 18:21 采纳率: 0%
浏览 42
已结题

xdoj累加和校验为什么这个代码没有满分

数据传输中一种常见的校验方式是累加和校验。其实现方式是在一次通讯数据包的最后加入一个字节的校验数据。
这个校验字节内容为前面数据包中所有数据按字节累加所得结果的最后一个字节。例如:
要传输的信息为: TEST(ASCII码为54,45,53,54)
四个字节的累加和为:54+45+53+54=140
校验和为累加和的最后一个字节,即40,也就是十进制的64
现在请设计一个程序计算给出的待传输信息的累加校验和

输入说明
输入为一个字符串,字符串长度不超过100个字符

输出说明
输出一个十进制整数,表示输入字符串的累加校验和。

输入样例
TEST
输出样例
64

#include <string.h>
int main()
{
  char ch1[101];
  char ch2[101];
  int change;
  scanf("%s",ch1);
  int sum=0;
  int i=0;
  while(ch1[i]!='\0'){
    sum=ch1[i]+sum;
    i++;
  }
  sprintf(ch2,"%x",sum);
  int len=strlen(ch2);
if(sum<10){
  printf("%d",ch2[len-1]-'0');
}
else if(sum>=10&&sum<16){
  printf("%d",ch2[len-1]-'a'+10);
}
else if(sum>=16){
 if(ch2[len-1]>='a'&&ch2[len-2]>='a')
 {
  printf("%d",(ch2[len-2]-'a'+10)*16+ch2[len-1]-'a'+10);
 }
 else if(ch2[len-1]>='a'&&ch2[len-2]<='9')
 {
  printf("%d",(ch2[len-2]-'0')*16+ch2[len-1]-'a'+10);
 }
 else if(ch2[len-1]<='9'&&ch2[len-2]>='a')
 {
  printf("%d",(ch2[len-2]-'a'+10)*16+ch2[len-1]-'0');
 }
 else if(ch2[len-1]<='9'&&ch2[len-2]<='9')
 {
  printf("%d",(ch2[len-2]-'0')*16+ch2[len-1]-'0');
 }
}
  return 0;
}

为什么我这样写没有满分啊,测试了很多用例结果都没错,请问遗漏了什么情况

  • 写回答

15条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-21 18:25
    关注
    获得0.80元问题酬金
    • 朋友,你想复杂了,你是累加和转换为十六进制字符串,然后再从这个字符串中提取最后两位字符来计算最终结果。

    • 问题是,在计算累加校验和时,直接用累加和的最后一个字节就可以了,不需要转换为十六进制字符串。

    一个更简单且直接的实现方法:

    • 遍历字符串中的每个字符,将其ASCII码值累加到一个整数变量中。
    • 用位操作(比如 sum & 0xFF)来获取累加和的最后一个字节。
    • 直接输出这个字节对应的十进制值。
    #include <stdio.h>
    
    int main() {
        char str[101];
        scanf("%s", str);
    
        int sum = 0;
        for (int i = 0; str[i] != '\0'; i++) {
            sum += (unsigned char)str[i];
        }
    
        // 获取累加和的最后一个字节
        int checksum = sum & 0xFF;
        printf("%d", checksum);
    
        return 0;
    }
    
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月29日
  • 创建了问题 11月21日

悬赏问题

  • ¥100 网页游戏在本地页面修改游戏结果
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数