两个输入外挂

众所周知cout要比scanf耗时,那么在已经使用scanf、算法优化已经饱和却还超时的情况下,可以试试输入外挂。

  1. 整型输入
    int sgn;//整数的正负

    char c;
    c=getchar();
    if(c==EOF) return false;
    while(c!='-'&&(c<'0'||c>'9')) c=getchar();//如果输入的既不是整数又不是-号则跳过
    sgn=(c=='-')?-1:1;//记录符号
    ret=(c=='-')?0:(c-'0');//记录初始值
    while((c=getchar())>='0'&&c<='9') ret=ret*10+c-'0';//将输入转换成整数形式
    ret*=sgn;//加上符号
    return true;
}
  1. 浮点型输入
bool readdouble(double &ret) {
    int sgn;//浮点的正负
    double bit=0.1;//小数点后的权重
    char c;
    c=getchar();
    if(c==EOF) return false;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();//如果输入的既不是整数又不是-号又不是.则跳过
    sgn=(c=='-')?-1:1;//记录符号
    ret=(c=='-')?0:c-'0';//记录初始值
    while((c=getchar())>='0'&&c<='9') ret=ret*10+c-'0';//将输入转换成整数形式
    if(c==' '||c=='\n') {//输入已经停止没有出现小数位
        ret*=sgn;
        return true;
    }
    while((c=getchar())>='0'&&c<='9') ret+=bit*(c-'0'),bit/=10;//小数点后的转换
    ret*=sgn;//加上符号
    return true;
}

调用部分

 int n;
    double m;
    if(readint(n)) printf("%d\n",n);
    if(readdouble(m)) printf("%lf",m);

猜你喜欢

转载自blog.csdn.net/chunjiekid/article/details/80410278
今日推荐