模拟 二进制,十进制的加1

位图模拟二进制的加1【建议采用】

当所有位均为1时,返回false;

否则返回true,表示还可以继续增加

bool  Increment(bitset<CHAR_COUNT>&bits) 

  if(CHAR_COUNT <= 0) 

      return false; 

  for(int i = CHAR_COUNT-1; i >=0; i--) 

   { 

      if(0 == bits[i]) 

       { 

          bits[i] = 1; 

           break; 

       } 

       else  

       { 

           if(i != 0)  

          { 

               bits[i] = 0; // 相当于进位操作,低位置为0  

           } 

           else 

           { 

                return false; // 最高位为1 ,再次进行加法将溢出  

          } 

      } 

   } 

   return true; 

注意:

位图使用:与字符串的相互转换

std::bitset<32>bs("011010101001");

std::string str=bs.to_string();

字符串模拟十进制的加1【摘自:剑指off】

溢出判断关键点

对于n位数,检测溢出的条件是:第1个字符产生进位

例如:n=3,当增加到999时,再加1,变成1000,左起第1个9产生进位

 

n位数,当所有位均是9时返回false;

否则返回true,表示还可以继续增加

bool Decimal_increment(char*number)

{

bool isoverflow=false;//是否溢出

bool takeover=0;//进位

int n=strlen(number);

 

if(n <= 0) 

      return false; 

 for(int i = n-1; i >=0; i--)

{

int sum=number[i]-'0'+takeover;

if(i==n-1)

     sum++;

if(sum>=10)

  {

if(i==0)

      isoverflow=true;  

else

{

sum-=10;

takeover=1;

number[i]=sum+'0';

}

}

else

 {number[i]=sum+'0';break;}

 

}

return isoverflow;

}

 

打印字符串关键点

在碰到第一个非0字符后才开始打印

例如:字符串“099”,应该打印:99

对字符串模拟十进制的扩展----模拟二进制加1

缺点:相比只使用位图实现二进制加1,空间要求多些

位图模拟二进制的加1

boolbinary_increment(bitset<n>&bits)

{

bool isoverflow=false;

bitset<1> takeover=0;

 

if(n <= 0) 

      return false; 

 for(int i = n-1; i >=0; i--)

{

int sum=bits[i]+takeover;

if(i==n-1)

     sum++;

if(sum>=2)

  {

if(i==0)

      isoverflow=true;  

else

{

sum-=2;

takeover=1;

bits[i]=sum;

}

}

else

 {bits[i]=sum;break;}

 

}

return isoverflow;

}

 

字符串模拟二进制的加1

bool Decimal_increment(char*number)

{

bool isoverflow=false;//是否溢出

bool takeover=0;//进位

int n=strlen(number);

 

if(n <= 0) 

      return false; 

 for(int i = n-1; i >=0; i--)

{

int sum=number[i]-'0'+takeover;

if(i==n-1)

     sum++;

if(sum>=2)

  {

if(i==0)

      isoverflow=true;  

else

{

sum-=2;

takeover=1;

number[i]=sum+'0';

}

}

else

 {bits[i]=sum+'0';break;}

 

}

return isoverflow;

}

你可能感兴趣的:(模拟 二进制,十进制的加1)