求大佬科普,switch的运算很慢吗?

@君梦如烟 2019-10-14 23:28 回复
#include<stdio.h>
#include<string.h>

int Jud(char c)
{
    int ret;
    ret = c - 'A'+1;
/*  switch(c)
    {
    case 'A':ret = 1;break;
    case 'B':ret = 2;break;
    case 'C':ret = 3;break;
    case 'D':ret = 4;break;
    case 'E':ret = 5;break;
    case 'F':ret = 6;break;
    case 'G':ret = 7;break;
    case 'H':ret = 8;break;
    case 'I':ret = 9;break;
    case 'J':ret = 10;break;
    case 'K':ret = 11;break;
    case 'L':ret = 12;break;
    case 'M':ret = 13;break;
    case 'N':ret = 14;break;
    case 'O':ret = 15;break;
    case 'P':ret = 16;break;
    case 'Q':ret = 17;break;
    case 'R':ret = 18;break;
    case 'S':ret = 19;break;
    case 'T':ret = 20;break;
    case 'U':ret = 21;break;
    case 'V':ret = 22;break;
    case 'W':ret = 23;break;
    case 'X':ret = 24;break;
    case 'Y':ret = 25;break;
    case 'Z':ret = 26;break;
    }
    */
    return ret;
}
int main(void)
{
    long num1=1,num2=1;
    char Star_name[7];
    char Team_name[7];
    scanf("%s%s",Star_name,Team_name);

    for(int i=0;i<strlen(Star_name);i++)
        {               
            num1 *= Jud(Star_name[i]);
        }
    for(int i=0;i<strlen(Team_name);i++)
        {
            num2 *= Jud(Team_name[i]);
        }

    if(num1%47 == num2%47)
        printf("GO\n");
    else
        printf("STAY\n");

    return 0;
}
@风随逐影 2019-10-15 08:36 回复 举报

@君梦如烟

单个if和26行switch显然没有可比性吧

如果比较的话除非你写26行if else

事实上if由于跳转惩罚的原因,若没有出现if的结果,跳转到其他语句会减慢速度。解决方法是用三目运算符和switch。

当然两行的if显然更快

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。