zoukankan      html  css  js  c++  java
  • ZOJ Problem Set

    这道题目不难,是一道简单的进制转换问题,但是发现了自己两个遗漏的知识点:

    1.关于scanf

    (1)scanf函数在输入时是以回车或者空格作为一次输入的结束

    (2)scanf函数在输入字符串的过程中是不吸纳空格的,而且如果输入是整数或者浮点数,前面的空格对输入没有影响,如下:

        char s1[100],s2[100];
        int a,b;
        scanf("%s%s%d%d",s1,s2,a,b);
        printf("%s%s%d%d",s1,s2);

    如上面这段代码,如果给定输入为:"    ACM    ACM      1 2     "

    则输出为:"ACMACM12"

    2.关于gets

    (1)gets函数是可以吸纳空格的

    (2)如果利用gets读取文件中的字符串,可以利用如下代码作为结束:

    while(gets(str)!=NULL)
    {}

    3.关于reverse函数,特别标注下,以前用过后来忘掉了,在algorithm中

    下面是ac代码

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
        char src[100];
        int base1,base2;
        while(scanf("%s%d%d",src,&base1,&base2)!=EOF)
        {
            int i,len=strlen(src),sum=0;
            for(i=0;i<len;i++)
            {
                if(src[i]>='0'&&src[i]<='9')
                    sum=sum*base1+src[i]-'0';
                else
                    sum=sum*base1+src[i]-55;
            }
            i=0;
            while(sum)
            {
                int t=sum%base2;
                if(t<10)
                    src[i++]=t+'0';
                else
                    src[i++]=t+55;
                sum/=base2;
            }
    
            if(i>7)
                printf("  ERROR
    ");
            else
            {
                while(i<7)
                {
                    src[i++]=' ';
                }
                reverse(src,src+i);
                src[i]='';
                printf("%s
    ",src);
            }
        }
    
        return 0;
    }

    关于进制转换的方法:统一转换为10进制然后取余得到每一位,至于怎样把其它进制转换到十进制,见上面代码(是个基本问题不多解释了)

  • 相关阅读:
    文件遍历
    小记——LocalFree与指针
    小记——遍历文件2
    数据库索引
    easyui验证
    JDBC事务
    ajax登录跳转实现
    dom解析xml
    kindeditor使用
    log4j的配置
  • 原文地址:https://www.cnblogs.com/xlturing/p/3351888.html
Copyright © 2011-2022 走看看