题解:P12681 【MX-J15-T1】叉叉学习数据类型

· · 题解

注意到这题没给编译环境。

出题人没说用哪个什么编译器那就按 32 位编译器算吧。

背过数据范围的同学都知道:

int-2147483648\le x\le2147483647
int0\le x\le4294967295
int-9223372036854775808\le x\le9223372036854775807
int0\le x\le18446744073709551615
string:并无范围,看你内存大小咯。

写个高精度比大小然后硬算就行了。

#include<bits/stdc++.h>
using namespace std;
// -1 -> a<b
// 1 -> a>b
// 0 -> a=b
int bdx(string s1,string s2){
    int i=0,op=1;
    if(s1[0]=='-'&&s2[0]==s1[0])op=-1,i++;
    if(s1[0]=='-'&&op==1)return -1*op;
    if(s2[0]=='-'&&op==1)return 1*op;
    if(s1==s2)return 0*op;
    else if(s1.size()<s2.size())return -1*op;
    else if(s1.size()>s2.size())return 1*op;
    for(;i<s1.size();i++){
        if(s1[i]<s2[i])return -1*op;
        else if(s1[i]>s2[i])return 1*op;
    }
}
string s;
int f(string x){
    return bdx(s,x);
}
int main(){
    cin>>s;
    if(f("-2147483648")>=0&&f("2147483647")<=0)puts("int");
    if(f("0")>=0&&f("4294967295")<=0)puts("unsigned int");
    if(f("-9223372036854775808")>=0&&f("9223372036854775807")<=0)puts("long long");
    if(f("0")>=0&&f("18446744073709551615")<=0)puts("unsigned long long");
    puts("string");
    return 0;
}