数据传输中一种常见的校验方式是累加和校验。其实现方式是在一次通讯数据包的最后加入一个字节的校验数据。
这个校验字节内容为前面数据包中所有数据按字节累加所得结果的最后一个字节。例如:
要传输的信息为: 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;
}
为什么我这样写没有满分啊,测试了很多用例结果都没错,请问遗漏了什么情况