• 【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” 字符串
    令其与字符串比较即可进行判断

  • 相关阅读:
    Android学习之多线程开发总结<二>
    Android学习之多线程开发总结<一>
    Android代码模版整理<一>
    Android学习之Bluetooth开发总结<续3>
    Android学习—自定义组件
    Android学习之解析XML
    Android学习—自定义对话框Dialog
    Android学习之Bluetooth开发总结<续2>
    Android学习之Bluetooth开发总结<续>
    .Net Core 发布项目时出现警告提示“不建议指定此包的版本”的解决办法
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569565.html
Copyright © 2020-2023  润新知