zoukankan      html  css  js  c++  java
  • 【CodeForces】[66A]Petya and Java

    这里写图片描述

    判断一个数的数据类型

    除了BigInteger之外其它的都可以直接判断
    所以主要是判断是否是BigInteger
    可根据位数
    那么只需要判断位数与边界值位数相同的情况

    其余的就是一些小技巧了

    #include<stdio.h>
    #include<string.h>
    int l;
    char s[120];
    char res[5][11]= {"byte","short","int","long","BigInteger"};
    bool cmp() {
        int x=(s[0]=='-'?1:0);
        if(l>19+x)
            return true;
        if(l<19+x)
            return false;
        char bg[20]="9223372036854775807";
        if(x)
            bg[18]='8';
        for(int i=x; i<l; i++) {
            if(s[i]>bg[i-x])
                return true;
            if(s[i]<bg[i-x])
                return false;
        }
        return false;
    }
    int judge() {
        if(cmp())
            return 4;
        else {
            __int64 sum=0;
            int i=(s[0]=='-'?1:0);
            for(; i<l; i++)
                sum=sum*10+s[i]-'0';
            if(s[0]=='-')
                sum--;
            if(sum<128)
                return 0;
            if(sum<32768)
                return 1;
            if(sum<=2147483647)
                return 2;
            else
                return 3;
        }
    }
    int main() {
        while(scanf("%s",s)!=EOF) {
            l=strlen(s);
            printf("%s
    ",res[judge()]);
        }
        return 0;
    }

    题目地址:【CodeForces】[66A]Petya and Java

    题意:
    给出一个数字,要求输出它的数据类型
    - 128~127为byte 
     - 32768~32767为short 
    - 2147483648~2147483647为int 
    - 9223372036854775808~9223372036854775807为long
    其它的为BigInteger 

    解题过程:
    因为数字的位数较大
    所以可用字符串读取

    除了BigInteger之外其它的都在__int64范围内
    所以如果可以判断数字在- 9223372036854775808~9223372036854775807
    则可转换为数字用__int64储存再进行进一步的范围判断

    所以主要是判断是否是BigInteger 
    可根据位数进行初步判断
    可知
    字符串长度大于19的正数(s[0]!=’-’)及大于20的负数(s[0]==’-’)
    一定为BigInteger
    字符串长度小于19的正数(s[0]!=’-’)及小于20的负数(s[0]==’-’)
    一定不为BigInteger
    所以只需要判断等于的情况

    则可建立一 “9223372036854775807” 字符串
    令其与字符串比较即可进行判断

  • 相关阅读:
    php 使用函数中遇到的坑之----list
    redis info
    Redis查询当前库有多少个 key
    Git怎样撤销一次分支的合并Merge
    JKS转PFX
    js获取当前域名、Url、相对路径和参数以及指定参数
    MySQL触发器更新和插入操作
    MySQL创建触发器的时候报1419错误( 1419
    xml 3 字节的 UTF-8 序列的字节 3 无效
    PostgreSQL的递归查询(with recursive) ,替代oracle 的级联查询connect by
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569565.html
Copyright © 2011-2022 走看看