ACM一些小的注意事项 持续更新ing

一.关于浮点数的输入输出

scanf :floot : %f

     double : %lf

        long double : %Lf

printf :floot : %f

    double : %f(用%lf的话会出很多奇奇怪怪的问题,poj好像必须用%f,不然wa(惨痛教训,bug找了半天,没想到是错在这))

       long double : %Lf

二.1.Java 类名称必须为Main

     2.java中字符串String是不可以修改的,要修改只能转换为字符数组.

三.memset函数:很多数都不能直接用memset赋值,因为memset是一个字节一个字节赋值的。(所以若要赋值的那个数转成2进制之后每个字节都是一样的话才能用memset)

可行:

memset(a,0,sizeof(a))//因为0低8为00000000,而32位就是32个0

memset(a,-1,sizeof(a))//因为1低8为11111111,而32位就是32个1

memset(a,0x3f3f3f3f,sizeof(a))// 0x3f3f3f3f=00111111 00111111 00111111 00111111,低8为00111111,一个字节一个字节填充之后还是00111111 00111111 00111111 00111111

源码:

void *(memset)(void *s, int c, size_t n)
{
    const unsigned char uc = c;
    unsigned char *su;
    for (su = s; 0 < n; ++su, --n)
        *su = uc;
    return (s);
}

 四.G++与C++:在提交题目中的语言选项里,G++和C++都代表编译的方式。

          C++:最标准的编译方式(ANSI C++编译)。

                                    G++:意味着你将使用GNU项目中最平凡适用人群最多的编译器(其实也就是我们熟悉的Code::Blocks的自带的编译器,Windows环境里一般是MinGW下的gcc,Linux中的gcc和前者基本是一个东西)进行编译。

          相对而言C++比G++快,但是C++容易栈溢出

          ACM一些小的注意事项 持续更新ing_第1张图片

          防栈溢出:在代码里加入#pragma comment(linker, "/STACK:102400000,102400000")

          输入输出加速外挂:

void scan_d(int &num)//输入
{
    char in;
    bool neg=false;
    while(((in=getchar()) > '9' || in<'0') && in!='-') ;
    if(in=='-'){
        neg=true;
        while((in=getchar()) >'9' || in<'0');
    }
    num=in-'0';
    while(in=getchar(),in>='0'&&in<='9')
        num*=10,num+=in-'0';
    if(neg) num=0-num;
}
void out(int a)  //输出
{  
    if(a < 0) {putchar('-'); a = -a;}  
    if(a >= 10)out(a / 10);  
    putchar(a % 10 + '0');  
}  
View Code

                  参考:https://blog.csdn.net/roney_win/article/details/8708519   ,https://blog.csdn.net/wr_technology/article/details/53414447

五.UVA的题目如果函数(除了main)写的是int却没给返回值会RE

转载于:https://www.cnblogs.com/107acm/p/9435692.html

你可能感兴趣的:(ACM一些小的注意事项 持续更新ing)