• 7943阅读
  • 4回复

多功能计算器的部分代码 [复制链接]

上一主题 下一主题
离线zswx0226
 

只看楼主 倒序阅读 楼主  发表于: 2012-10-05
关键词: 大整数计算
大整数计算的代码:

  1. #include"BigInt.h"
  2. BigInt::BigInt()
  3. {
  4. digital[0]=0;  
  5. len=0;       //当前大整数的长度
  6. sign=0;         //符号为正
  7.     isLegal=true;
  8. }
  9. BigInt::BigInt(qllong obj)
  10. {
  11.     if(obj<0)
  12.     {sign=true,obj = -obj;}
  13.     else sign =false;
  14.     digital[0]=obj%BASE;len=0;
  15.     while(obj/=BASE)
  16.     {digital[++len] = obj%BASE;}
  17.     isLegal=true;
  18. }
  19. BigInt::BigInt(const BigInt &obj)
  20. {
  21. for(len=0,sign=obj.sign;len<=obj.len;len++)
  22.   digital[len]=obj.digital[len];
  23. len--;
  24.      isLegal=obj.isLegal;
  25. }
  26. BigInt& BigInt::operator =(const BigInt &obj)
  27. {
  28. for(len=0,sign=obj.sign;len<=obj.len;len++)
  29.   digital[len]=obj.digital[len];
  30. len--;
  31.      isLegal=obj.isLegal;
  32. return *this;
  33. }
  34. BigInt& BigInt::operator = (QString qstr)
  35. {
  36. int i=0,j,k;
  37.     if(qstr[0]=='-')
  38.     {sign=1;}
  39. else
  40.     {
  41.         sign=0;
  42.         if(qstr[0]=='+')
  43.             qstr.remove(0,1);
  44.     }
  45.     i=qstr.length();
  46. for(i=i-BASELEN,k=0;i>=sign;i-=BASELEN,++k)
  47. {
  48.   for(j=0,digital[k]=0;j<BASELEN;++j)
  49.         {
  50.             if(qstr[i+j]==' ')continue;
  51.             digital[k]=digital[k]*10+qstr[i+j].toAscii()-'0';
  52.         }
  53. }
  54. i+=BASELEN;
  55. for(j=sign,digital[k]=0;j<i;++j)
  56.     {
  57.         if(qstr[j]==' ')continue;
  58.         digital[k]=digital[k]*10+qstr[j].toAscii()-'0';
  59.     }
  60. if(i==sign)k--;
  61. len=k;
  62.     isLegal=true;
  63. return *this;
  64. }
  65. BigInt BigInt::operator +(const BigInt &obj)
  66. {
  67. BigInt sum;
  68. if(obj.sign==sign)
  69. { //同号加;
  70.   int carry=0,i;
  71.   for(i=0;i<=len && i <= obj.len;i++)
  72.   {
  73.    carry = carry +digital+obj.digital;
  74.    sum.digital = carry%BASE;
  75.    carry= carry/BASE;
  76.   }
  77.   for(;i<=len;i++)
  78.   {carry = carry + digital, sum.digital = carry%BASE, carry/=BASE;}
  79.   for(;i<=obj.len;i++)
  80.   {carry = carry +obj.digital, sum.digital = carry%BASE,carry =carry/BASE;}
  81.   if(carry&&i<MAXN){sum.digital=carry;sum.len=i;}
  82.         else if(carry&&i==MAXN){isLegal=false;return *this;}
  83.   else sum.len=i-1;
  84.   sum.sign = sign;
  85.   return sum;
  86. }
  87. else
  88. { //异号变同号减法;
  89.   sum = obj;sum.sign= !sum.sign;
  90.   return *this-sum;
  91. }
  92. }
  93. BigInt BigInt::operator +(int n)
  94. {
  95. if(n==0)
  96.   return *this;
  97. if((sign==1&&n<0)||(sign==0&&n>0))
  98. {
  99.   int temp,carry=0,i=0;
  100.   if(n<0)n=-n;
  101.   BigInt sum;
  102.   if(len==0&&n>=BASE){digital[1]=0;}  
  103.   do
  104.   {
  105.    temp=n%BASE;n/=BASE;
  106.    carry+=digital+temp;
  107.    sum.digital=carry%BASE;
  108.    carry= carry/BASE;
  109.    i++;
  110.   }while(n);
  111.   while(i<=len)
  112.   {
  113.    carry+=digital;
  114.    sum.digital=carry%BASE;
  115.    carry=carry/BASE;
  116.    i++;
  117.   }
  118.   if(carry&&i<MAXN){digital=carry,sum.len=i;}
  119.         else if(carry&&i==MAXN){isLegal=false;return *this;}
  120.   else sum.len=i-1;
  121.   sum.sign=sign;
  122.   return sum;
  123. }
  124. else
  125. {
  126.   n=-n;
  127.   return *this-n;
  128. }
  129. }
  130. BigInt BigInt::operator -(const BigInt &obj)
  131. {
  132. const BigInt *sub1,*sub2;
  133. BigInt quotient;
  134. if(sign==obj.sign)
  135. { //同号减;
  136.   int i, carry=0;
  137.   i = this->Cmp(obj,1);                //绝对值比较;
  138.   if(i==0)
  139.    return quotient;                 //返回一个零
  140.   else if(i<0)
  141.    sub1=&obj,sub2=this,quotient.sign=!sign;
  142.   else
  143.    sub1=this,sub2 = &obj,quotient.sign=sign;
  144.   for(i=0;i<=sub2->len;i++)
  145.   {
  146.    if((quotient.digital=sub1 ->digital-carry-sub2->digital)<0)
  147.     carry = 1, quotient.digital+=BASE;      //借位;
  148.    else
  149.     carry = 0;
  150.   }
  151.   for(;i<=sub1->len;i++)
  152.   {
  153.    if((quotient.digital = sub1->digital-carry )< 0 )
  154.     carry = 1,quotient.digital +=BASE;       //借位;
  155.    else
  156.     carry = 0;
  157.   }
  158.   do
  159.   {
  160.    --i;
  161.   }while(i&"ient.digital==0);
  162.   quotient.len = i;
  163.   return quotient;
  164. }
  165. else
  166. { //异号变同号加:
  167.   quotient = obj, quotient.sign =!obj.sign;
  168.   return *this + quotient;
  169. }
  170. }
  171. BigInt BigInt::operator -(int n)
  172. {
  173. if(n==0)
  174.   return *this;
  175. if((sign==1&&n<0)||(sign==0&&n>0))
  176. {
  177.   BigInt quotient;
  178.         qllong carry;
  179.   int i;
  180.   if(n<0)n=-n;
  181.   quotient.sign=sign;
  182.   if(len>1)
  183.   {
  184.    if((quotient.digital[0]=digital[0]-n%BASE)<0)
  185.     carry=1,quotient.digital[0]+=BASE;      //借位;
  186.    else carry=0;
  187.    i=1;
  188.    if(n/=BASE)
  189.    {
  190.     if((quotient.digital[1]=digital[1]-n-carry)<0)
  191.      carry=1,quotient.digital[1]+=BASE;
  192.     else carry=0;
  193.     i=2;
  194.    }
  195.    while(i<=len)
  196.       {
  197.     if((quotient.digital=digital-carry)<0)
  198.      carry=1,quotient.digital+=BASE;
  199.     else
  200.      carry=0;
  201.     i++;
  202.       }
  203.    if(quotient.digital[len]==0)
  204.     quotient.len=len-1;
  205.    else quotient.len=len;
  206.   }
  207.   else
  208.   {
  209.    carry=this->FirSecDigit()-n;
  210.    if(carry<0){quotient.sign=true;carry=-carry;}
  211.    quotient.digital[0]=carry%BASE;
  212.    if(carry/=BASE)
  213.    {quotient.digital[1]=carry;quotient.len=1;}
  214.   }
  215.   return quotient;
  216. }
  217. else
  218. {
  219.   n=-n;
  220.   return *this+n;
  221. }
  222. }
  223. BigInt BigInt::operator *(const BigInt &obj)
  224. {
  225. int i,j,maxlen;
  226.     qllong carry;
  227.     BigInt product;
  228. if(this->Zero()||obj.Zero())
  229.   return product;
  230. maxlen=obj.len+len+1;
  231.     if(maxlen>MAXN){isLegal=false;return *this;}
  232.     memset(product.digital,0,sizeof(qllong)*maxlen );
  233. for(i = 0; i <= obj.len; i++)
  234. {
  235.   for(j =0,carry=0;j<=len;j++)
  236.   {
  237.    carry += obj.digital * digital[j] +product.digital[j+i];
  238.    product.digital[j+i] = carry%BASE;
  239.    carry/=BASE;
  240.   }
  241.   if(carry&&i+j<MAXN)
  242.    product.digital[i+j] = carry;
  243. }
  244.     if(carry&&maxlen==MAXN)
  245.         {isLegal=false;return *this;}
  246. if(!carry)maxlen--;
  247. product.len=maxlen;
  248. product.sign = sign^obj.sign;
  249. return product;
  250. }
  251. BigInt BigInt::operator *(int n)
  252. {
  253. int i,j,maxlen,temp;
  254.     qllong carry;
  255.     BigInt product;
  256. if(this->Zero()||n==0)return product;
  257. if(n>=BASE)maxlen=len+2;
  258. else maxlen=len+1;
  259. if(n<0){product.sign=!sign,n=-n;}
  260. else product.sign=sign;
  261.     if(maxlen>MAXN){isLegal=false;return *this;}
  262.     memset(product.digital,0,sizeof(qllong)*maxlen );
  263. temp=n%BASE;
  264. for(i=0,carry=0;i<=len;i++)
  265. {
  266.   carry +=temp*digital;
  267.   product.digital=carry%BASE;
  268.   carry/=BASE;
  269. }
  270. if(carry&&i<MAXN) product.digital = carry;
  271.     else if(carry&&i==MAXN){isLegal=false;return *this;}
  272. else product.digital=0;
  273. if(n/=BASE)
  274. {
  275.   for(j=1,carry=0;j<=i;++j)
  276.   {
  277.    carry+=product.digital[j]+n*digital[j-1];
  278.    product.digital[j]=carry%BASE;
  279.       carry/=BASE;
  280.   }
  281.   if(carry&&j<MAXN) product.digital[j]=carry;
  282.         else if(carry&&j==MAXN){isLegal=false;return *this;}
  283.   else maxlen--;
  284. }
  285. if(n==0&&!carry)maxlen--;
  286. product.len=maxlen;
  287. return product;
  288. }
  289. BigInt BigInt::operator /(const BigInt &obj)
  290. {
  291. int k;
  292.     qllong div;
  293. BigInt x,z,res;
  294. if(this->Zero())return *this;
  295.     if(obj.sign==true||obj.Zero())
  296.         {isLegal=false;return *this;}
  297. x = *this;
  298. x.sign=false;
  299. res.sign=obj.sign^sign;
  300. while( x.Cmp(obj,1) >0 )
  301. {
  302.   k = x.len-obj.len;
  303.   if( x.digital[x.len] > obj.digital[obj.len] )
  304.    div =x.digital[x.len]/(obj.digital[obj.len]+1);
  305.   else if(x.len>obj.len)
  306.   {
  307.    k--,
  308.    div=(x.digital[x.len]*BASE+x.digital[x.len-1])/(obj.digital[obj.len]+1);
  309.   }
  310.   else break;                  //当x<=obj时跳出循环
  311.   res+=(z=div).Shift(k);
  312.   z*=obj;
  313.   x-=z.Shift(k);
  314. }
  315. if(x.Cmp(obj,1)>=0)res=res+1;
  316. if(res.Zero())res.sign=false;
  317. else res.sign=sign;
  318. return res;
  319. }
  320. bool BigInt::operator >(const BigInt &obj)
  321. {
  322.     int i;
  323.     if(len>obj.len)
  324.         return 1;
  325.     if(len<obj.len)
  326.         return 0;
  327.     for(i=len;i>=0;--i)
  328.     {
  329.         if(digital>obj.digital)
  330.             return 1;
  331.         if(digital<obj.digital)
  332.             return 0;
  333.     }
  334.     return 0;
  335. }
  336. bool BigInt::operator <(const BigInt &obj)
  337. {
  338.     int i;
  339.     if(len<obj.len)
  340.         return 1;
  341.     if(len>obj.len)
  342.         return 0;
  343.     for(i=len;i>=0;--i)
  344.     {
  345.         if(digital<obj.digital)
  346.             return 1;
  347.         if(digital>obj.digital)
  348.             return 0;
  349.     }
  350.     return 0;
  351. }
  352. BigInt& BigInt::operator +=(const BigInt &obj)
  353. {
  354. if(obj.sign==sign)
  355. { //同号加;
  356.   int carry=0,i;
  357.   for(i=0;i<=len && i <= obj.len;i++)
  358.   {
  359.    carry = carry +digital+obj.digital;
  360.    digital = carry%BASE;
  361.    carry= carry/BASE;
  362.   }
  363.   for(;i<=len;i++)
  364.   {carry = carry + digital,digital = carry%BASE, carry/=BASE;}
  365.   for(;i<=obj.len;i++)
  366.   {carry = carry +obj.digital,digital = carry%BASE,carry =carry/BASE;}
  367.   if(carry&&i<MAXN)digital=carry;
  368.         else if(carry&&i==MAXN){isLegal=false;return *this;}
  369.   len=i-!carry;
  370.   sign = sign;
  371. }
  372. else
  373. { //异号变同号减法;
  374.   sign=!sign;
  375.   BigInt temp=obj;
  376.   *this=temp-*this;
  377. }
  378. return *this;
  379. }
  380. BigInt& BigInt::operator -=(const BigInt &obj)
  381. {
  382. const BigInt *sub1,*sub2;
  383. if(sign==obj.sign)
  384. { //同号减;
  385.   int i, carry=0;
  386.   i = this->Cmp(obj,1);                //绝对值比较;
  387.   if(i==0)
  388.   {sign=false;digital[0]=0;len=0;return *this;}//返回一个零
  389.   else if(i<0)
  390.    sub1=&obj,sub2=this,sign=!sign;
  391.   else
  392.    sub1=this,sub2 = &obj;
  393.   for(i=0;i<=sub2->len;i++)
  394.   {
  395.    if((digital=sub1 ->digital-carry-sub2->digital)<0)
  396.     carry=1,digital+=BASE;      //借位;
  397.    else
  398.     carry = 0;
  399.   }
  400.   for(;i<=sub1->len;i++)
  401.   {
  402.    if((digital = sub1->digital-carry )< 0 )
  403.     carry = 1,digital +=BASE;       //借位;
  404.    else
  405.     carry = 0;
  406.   }
  407.   do
  408.   {
  409.    --i;
  410.   }while(i&&digital==0);
  411.   len = i;
  412. }
  413. else
  414. { //异号变同号加:
  415.   BigInt temp=obj;
  416.   temp.sign =!obj.sign;
  417.   *this=*this+temp;
  418. }
  419. return *this;
  420. }
  421. BigInt& BigInt::operator *=(const BigInt &obj)
  422. {
  423. int i,j,maxlen;
  424.     qllong carry;
  425.     BigInt product;
  426.     if(this->Zero())
  427.     {return *this;}
  428.     if(obj.Zero())
  429.     {*this=obj;return *this;}
  430. maxlen=obj.len+len+1;
  431.     if(maxlen>MAXN){isLegal=false;return *this;}
  432.     memset(product.digital,0,sizeof(qllong)*maxlen );
  433. for(i = 0; i <= obj.len; i++)
  434. {
  435.   for(j =0,carry=0;j<=len;j++)
  436.   {
  437.    carry += obj.digital * digital[j] +product.digital[j+i];
  438.    product.digital[j+i] = carry%BASE;
  439.    carry/=BASE;
  440.   }
  441.   if(carry&&i+j<MAXN)
  442.    product.digital[i+j] = carry;
  443. }
  444.     if(carry&&maxlen==MAXN)
  445.         {isLegal=false;return *this;}
  446. if(!carry)maxlen--;
  447. product.len=maxlen;
  448. product.sign = sign^obj.sign;
  449. *this=product;
  450. return *this;
  451. }
  452. BigInt BigInt::operator ^(int n)
  453. {
  454. BigInt temp=*this,res;
  455. if(n&1){res=temp;}
  456. else{res.digital[0]=1;}
  457. n>>=1;
  458. for(;n>0;n>>=1)
  459. {
  460.   temp*=temp;
  461.   if(n&1)
  462.   {res*=temp;}
  463.         if(temp.isLegal==false||res.isLegal==false)
  464.         {this->isLegal=false;return *this;}
  465.   //判断数据溢出,已在*=中完成判断。
  466. }
  467. return res;
  468. }
  469. BigInt BigInt::operator %(BigInt obj)
  470. {
  471. int k;
  472.     qllong div;
  473. BigInt x;
  474. if(this->Zero())return *this;
  475.     if(obj.Zero()){isLegal=false;return *this;}
  476. x = *this;
  477. obj.sign=x.sign=false;
  478. while( x.Cmp(obj,1) >0 )
  479. {
  480.   k = x.len-obj.len;
  481.   if( x.digital[x.len] > obj.digital[obj.len] )
  482.    div =x.digital[x.len]/(obj.digital[obj.len]+1);
  483.   else if(x.len>obj.len)
  484.   {
  485.    k--,
  486.    div=(x.digital[x.len]*BASE+x.digital[x.len-1])/(obj.digital[obj.len]+1);
  487.   }
  488.   else break;                  //当x<=obj时跳出循环
  489.   x-=(obj*(int)div).Shift(k);
  490. }
  491. if(x.Cmp(obj,1)>=0)x-=obj;
  492. if(x.Zero())x.sign = false;
  493. else x.sign=sign;
  494. return x;
  495. }
  496. BigInt& BigInt::operator >>=(int n)
  497. {
  498. if(n>1)
  499.       *this>>=(n-1);
  500. if(digital[0]<=1&&len==0)digital[0] = 0;
  501. else
  502. {
  503.   int k=len,t,carry=0;
  504.   if (digital[k]==1)len--;
  505.   while(k>=0)
  506.   {
  507.    t = digital[k]&1;
  508.    digital[k]= digital[k]>>1;
  509.    if(carry)digital[k]+=BASE/2;
  510.    k--;
  511.    carry = t;
  512.   }
  513. }
  514. if(this->Zero())sign=0;
  515. return *this;
  516. }
  517. BigInt& BigInt::operator <<=(int n)
  518. {
  519. if(Zero())return *this;
  520. if(n>1)
  521.       *this<<=(n-1);
  522. int k=0,t,carry=0;
  523. while(k<=len)
  524. {
  525.   t=digital[k]<<1;          //t最大值为(BASE-1)*2,不会溢出
  526.   digital[k]=t%BASE;
  527.   if(carry)digital[k]++;
  528.   carry=t/BASE;
  529.   k++;
  530. }
  531. if(carry)
  532. {
  533.   digital[k]=1;len++;
  534.         if(len>MAXN)
  535.             {isLegal=false;return *this;}
  536. }
  537. return *this;
  538. }
  539. bool BigInt::Zero()const
  540. { return digital[0]+len==0;}
  541. qllong BigInt::FirSecDigit()
  542. {
  543.     qllong temp=digital[len];
  544. if(len>0)
  545.   return temp*BASE+digital[len-1];
  546. else
  547.   return temp;
  548. }
  549. BigInt BigInt::Sqrt()
  550. {
  551. //本算法时间复杂度接近线性
  552.     if(sign)   //负数没有平方根
  553.        {isLegal=false;return *this;}
  554. BigInt res,rem;            //res保留的最终结果,rem保留余数
  555.     qllong temp1,temp2;
  556. int temp,i;
  557. double r;
  558. bool flag;
  559. res.digital[0]=sqrt((double)digital[len]);
  560. rem.digital[0]=digital[len]-res.digital[0]*res.digital[0];
  561. for(i=len-1;i>=0;--i)
  562. {
  563.   rem=rem.Shift(1),rem.digital[0]=digital;    
  564.   /*temp=(int)(rem/(res*20000)); */
  565.   //此处的乘法不复杂,因为商为一个四位数,但是空间消耗很大,因此换用下面的方法
  566.   flag=false;
  567.   temp1=rem.FirSecDigit();                          //获取大整数的前两位(16位)
  568.   res=res*20000,temp2=res.FirSecDigit();
  569.   if(temp1<temp2&&rem>res)                          //若temp1<temp2,则temp2除BASE
  570.   {temp2/=BASE;flag=true;}
  571.   temp=temp1/temp2;
  572.   //下面两个条件语句用来精确temp,根据flag选择两种方式来逼近精确值
  573.   if(flag)
  574.   {while((res+temp)*temp>rem)                        //若单纯用temp--,对于有些情况下,效率会很差
  575.    {temp--;}
  576.   }
  577.   else
  578.   {for(r=0.6;(res+temp)*temp>rem;r+=0.1)             //此处非常巧妙,逐渐增大权值,循环次数在5次之内
  579.    {temp=temp1/(temp2+temp*r);}                   //并且当r==1时一定可以得到精确值
  580.          while((res+(temp+1))*(temp+1)<rem)
  581.              temp++;
  582.         }
  583.   rem-=((res+temp)*temp);                           //最终所得余数
  584.   res=(res>>=1)+temp;                               //平方根的值,注意一定要加()
  585. }
  586. return res;
  587. }
  588. void BigInt::Factorial(int n)
  589. {
  590.     this->sign=false;
  591.     if(n<0){this->sign=true;n=-n;}
  592. int i,j,m=0;
  593.     qllong carry;
  594.     digital[0]=1;
  595.     for(i=2;i<=n;i++)
  596. {
  597.   for(j=0,carry=0;j<=m;j++)
  598.   {  
  599.             carry+=digital[j]*i;
  600.             digital[j]=carry%BASE;
  601.    carry/=BASE;
  602.   }
  603.   if(carry)
  604.   {
  605.             if(m+1>=MAXN)
  606.             {
  607.                 isLegal=false;
  608.                 return ;
  609.             }
  610.             digital[++m]=carry;
  611.   }
  612. }
  613.     len=m;
  614. }
  615. void BigInt::Factorial(int n, char c)
  616. {
  617.     this->sign=false;
  618.     if(n<0){this->sign=true;n=-n;}
  619.     int i,j,m=0,work;
  620.     qllong carry;
  621.     if(n&1){work=digital[0]=1;}
  622.     else {work=digital[0]=2;}
  623.     for(i=work+2;i<=n;i+=2)
  624.     {
  625.         for(j=0,carry=0;j<=m;j++)
  626.         {
  627.             carry+=digital[j]*i;
  628.             digital[j]=carry%BASE;
  629.             carry/=BASE;
  630.         }
  631.         if(carry)
  632.         {
  633.             if(m+1>=MAXN)
  634.             {
  635.                 isLegal=false;
  636.                 return ;
  637.             }
  638.             digital[++m]=carry;
  639.         }
  640.     }
  641.     len=m;
  642. }
  643. BigInt BigInt::Shift(int k)
  644. {
  645. if(k==0||this->Zero())return *this;
  646.     if(len+k>=MAXN){isLegal=false;return *this;}
  647. BigInt temp;
  648. int i;
  649. temp=*this;
  650. for(i=0;i<=len;i++)
  651.   temp.digital[i+k]=digital;
  652. for(i=0;i<k;i++)
  653.   temp.digital = 0;
  654. temp.sign=sign;
  655. temp.len=len+k;
  656. return temp;
  657. }
  658. int BigInt::Cmp(const BigInt &obj,bool Is_Abs)
  659. {
  660. //sign:1表示负数,0表示非负数
  661. if(!Is_Abs&&(obj.sign^sign))
  662.   return (obj.sign-sign);     //比较正负号
  663.     int k=len-obj.len;        //比较长度;
  664.     if(k!=0)
  665. {
  666.   if((k>0&&!sign)||(k<0&&sign))
  667.    return 1;
  668.   else
  669.    return -1;
  670. }
  671. else
  672. {
  673.   k=len;
  674.   while(digital[k]==obj.digital[k]&&k>0)
  675.   {--k;}
  676.   if(digital[k]==obj.digital[k])
  677.    return 0;
  678.   if(Is_Abs)
  679.    return digital[k]>obj.digital[k]?1:-1;
  680.   else
  681.   {
  682.    if(digital[k]>obj.digital[k])
  683.     return sign?-1:1;
  684.    else
  685.     return sign?1:-1;
  686.   }
  687. }
  688. }
  689. void Swap(BigInt *num1,BigInt *num2)
  690. {
  691.     BigInt temp;
  692.     temp=*num1;
  693.     *num1=*num2;
  694.     *num2=temp;
  695. }
  696. QString BigInt::toQString()
  697. {
  698.     QString qstr;
  699.     if(sign==true)
  700.         qstr.append('-');
  701.     qstr.append(QString("%1").arg(digital[len]));
  702.     for(int i=len-1;i>=0;i--)
  703.     {
  704.         qstr.append(QString("%1").arg(digital,8,10,QChar('0')));
  705.     }
  706.     return qstr;
  707. }


离线zswx0226

只看该作者 1楼 发表于: 2012-10-05
自己顶一个
离线XChinux

只看该作者 2楼 发表于: 2012-10-05
顶楼主。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线lloo

只看该作者 3楼 发表于: 2016-11-28
不错哦!
离线lelezjg

只看该作者 4楼 发表于: 2021-07-15
快速回复
限100 字节
 
上一个 下一个