注册 登录
编程论坛 C语言论坛

不太理解sum=a+b+c+d+e-5*64,请教大家

Elean 发布于 2021-11-12 10:28, 1957 次点击
利用ASCII码简化
奇迹暖暖的衣服等级有A,B,C,D四个等级。5种属性,A等为1分,B等2分,C等3分,D等4分。(不符合游戏实际,不要在意细节啦)
Input
 输入五个字符(A-D,都是大写)各个字符中间用空格隔开
Output
 分数值,注意换行。
#include<stdio.h>
 int main(void)
{
int sum=0,a=0,b=0,c=0,d=0,e=0;
scanf("%c %c %c %c %c", &a, &b, &c, &d, &e );
sum = a + b + c + d + e - 5 * 64;
printf("%d\n", sum);
return 0;
}
6 回复
#2
lin51616782021-11-12 10:40
int 用%c读入是错的
#3
lin51616782021-11-12 10:42
'A' - 65 是 1
'B' - 65 是 2
....
减去65 是'A'-'D' 转换到 1-4
5件衣服 就得减5次而已 索性直接乘起来而已
#4
Elean2021-11-12 19:51
回复 3楼 lin5161678
但是要求输入的是字符呀?
#5
Hhu_TF2021-11-12 22:41
回复 4楼 Elean
建议查下ASCII码,虽然输入的是字母,但是输出%d,即输出整数型数字,字母将转换成对应的十进制数字(阅ASCII码),而字母对应的数字减去64就变成了对应的分数,就像楼上所说的那样。
#6
lin51616782021-11-12 23:32
以下是引用Elean在2021-11-12 19:51:37的发言:

但是要求输入的是字符呀?

既然要输入字符
为什么不定义为char类型呢
#7
apull2021-11-13 23:50
输入为字符,scanf里要使用%c

A为1分,B为2分等递增,刚好对应字母顺序,而A的值是65,因此输入的字母通过输入值-64转换为分值。
sum=(a-64)+(b-64)+(c-64)+(d-64)+(e-64)
sum=a+b+c+d+e-64-64-64-64-64
sum=a+b+c+d+e-5*64
加法交换律,结合律
1