#include <stdio.h>
int trans(int k) //数据反转
{ int j;
while(k!=0)
{
j=j*10+k%10;
k=k/10;
}
return j;
}//
#if 1
int reverse1( int x) { //key1:按位取值反转比对法编译器验证通过
int j=0,k=x,n=1;
if((x<=2147483647 )&&(x>=-2147483648))
{
//
while(k/10!=0)
{n++;k=k/10; } //计算位数
int a[n] ;
for(j=n-1;j>=0;j--) //取值
{
a[j]=x%10 ;
x=x/10;
}if (n>9) //十位数,末位检测
{ //2147483648
//2147483648 //诸位比小于等于正大于等于负。
if( ((a[9]<=2)&&(a[8]<=1)&&(a[7]<=4)&&(a[6]<=7)&& \
(a[5]<=4)&& (a[4]<=8)&& (a[3]<=3) && (a[2]<=6)&&(a[1]<=4)&& (a[0]<=7)) && ((a[9]>=-2)&&(a[8]>=-1)&&(a[7]>=-4)&&(a[6]>=-7)&& (a[5]>=-4)&& (a[4]>=-8)&&(a[3]>=-3)&& (a[2]>=-6)&& (a[1]>=-4)&& (a[0]>=-8) ) )
{
x=0;
for(j=n-1;j>=0;j--)
{
x=a[j]+x*10 ; // think is dim!!!!! //反向
}
return x ;
}
else
{return 0;}
//
}
else {
x=0;
for(j=n-1;j>=0;j--)
{
x=a[j]+x*10 ; // 反向
}
}
}else
{ // 2147483648
return 0; // 964632435 * 10
}
return x;
}#endif
/11
#if 1
int reverse2( int x) { //key2:改变接受值的值范围大小,进而参数范围比对LeetCode验证通过
int j=0,k=x,n=1;
long long int u=x;
while(k/10!=0)
{n++;k=k/10; } //计算位数
int a[n] ;
for(j=n-1;j>=0;j--) //取值
{
a[j]=x%10 ;
x=x/10;
}
u=0;
for(j=n-1;j>=0;j--)
{
u=a[j]+u*10 ; // think is dim!!!!! //反向
}
if((u>2147483647 )||(u<-2147483648))
{
return 0;
}
else
{
return u;
}
}#endif
int p_w(int i,int m) //多次方函数 ok
{ int h=1;
while(m--)
{
h*=i;
}
return h;
}
int main()
{
// 2147483648
int x=-1334567832 ;
// printf("len is %d\n",k);
printf("long is %d\n",sizeof( long int));
printf("output is %d\n",reverse1(x )); // -2143847412
printf("output is %d\n",reverse2(x ));
return 0;
}
对一个 32 位的有符号整数,将这个整数中每位上的数字进行反转。
最新推荐文章于 2021-11-17 17:00:47 发布