看这个问题没有人写,我就整一个,经过vs2010的演算,long long, long, int, short的上下限都可以套用,不过求最小值的时候直接就偷懒用max取负减一了,实话实说,这个程序好像没什么实际用途,只能用来求整数类型的极限。
具体怎么套用,我程序里标注了,全对着换了肯定没bug。
#include<stdio.h>
long long MAX()//long long -> what you want
{
short i,n;
long long x=0,a=10,b=1,t,t0;//long long -> what you want
for(n=1;;n++)
{
if(a<0 || a/b!=10)break;
else b=a;
a*=10;
}
for(;n>0;n--)
{
for(i=9;i>0;i--)
{
a=b*i;
t=x+a;
if(t<0 || a/b!=i)continue;
else {t0=t;break;}
}
x=t0;
b/=10;
}
return x;
}
long long MIN()//long long -> what you want
{
long long x;//long long -> what you want
x=-MAX()-1;
return x;
}
int main()
{
long long y,y1;//long long -> what you want
y=MAX();
y1=MIN();
printf("MAX=%lld\n",y);//%lld -> what you want
printf("MIN=%lld\n",y1);//%lld -> what you want
return 0;
}
效果:
我是一个初学者,用的还不太熟练,要是有大佬可以优化一下的话,还请不吝赐教。