对一个 32 位的有符号整数,将这个整数中每位上的数字进行反转。

  #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;    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值