找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3066|回复: 3

大加减乘除 c源码 (测试)

[复制链接]
发表于 2016-8-3 15:42:58 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 Ayala 于 2016-12-3 18:58 编辑

编译 命令行
详见帖 https://www.0xaa55.com/forum.php ... &page=1#pid6571
有bug请反馈 不擅长c代码 写的太难看

  1. /*
  2. #include <Windows.h>
  3. #include <WinBase.h>
  4. #include <malloc.h>
  5. */



  6. #ifndef Uint8B
  7. typedef unsigned __int64 Uint8B;
  8. #endif

  9. #pragma pack(8)

  10. /*
  11. #if !defined(_LARGE_INTEGER) && !defined(LARGE_INTEGER)
  12. typedef union _LARGE_INTEGER
  13. {
  14.   struct
  15.   {
  16.     __int32 LowPart;
  17.     __int32 HighPart;
  18.   }u;
  19.   __int64 QuadPart;
  20. }LARGE_INTEGER;
  21. #endif

  22. typedef struct
  23. {
  24.   struct            //
  25.   {
  26.     __int32 n;
  27.     __int32 max;
  28.   }len;
  29.   __int64*  databuffer;        //
  30.   void*     filehandle;  //
  31.   __int64   mod;
  32. }polynomial;

  33. typedef polynomial* ppolynomial;
  34. */

  35. typedef struct
  36. {
  37.         double real;
  38.         double img;
  39. }complex;
  40. typedef complex* pcomplex;
  41. #pragma pack()

  42. #ifdef cp
  43. #undef cp
  44. typedef complex cp;
  45. #else
  46. typedef complex cp;
  47. #endif

  48. #ifndef max
  49. #define max(a,b) (((a) > (b)) ? (a) : (b))
  50. #endif
  51. #ifndef min
  52. #define min(a,b) (((a) < (b)) ? (a) : (b))
  53. #endif


  54. #ifdef x86_xp
  55. #ifndef _ftol2

  56. __int64 _ftol2(double x)
  57. {
  58.   __int16 e,ee;
  59.   __int64 r;
  60.   __asm
  61.   {
  62.     fld qword ptr x
  63.    
  64.     fstsw word ptr [ee]
  65.     mov ax,word ptr [ee]
  66.     or ah,0xc
  67.     mov word ptr [e],ax
  68.    
  69.     fldcw word ptr [e]
  70.     fistp qword ptr [r]
  71.     fldcw word ptr [ee]
  72.    
  73.     mov eax,dword ptr [r]
  74.     mov edx,dword ptr [r+4]
  75.   }
  76. }
  77. #endif
  78. #endif



  79. double sin(double x);
  80. double cos(double x);

  81. double acos(double x);
  82. double fmod(double x,double y);
  83. double fabs(double x);
  84. double floor(double x);
  85. double ceil(double x);

  86. void print(__int64 x[],int nx);
  87. void convertd(__int64 a[],int na,__int64 b[],int *nb);
  88. void trim(__int64 x[],int *nx);



  89. __int64 polynomial_cmp(__int64 a[],int na,__int64 b[],int nb);

  90. void polynomial_add(__int64 a[],int na,__int64 b[],int nb,__int64 c[],int *nc);
  91. void polynomial_sub(__int64 a[],int na,__int64 b[],int nb,__int64 c[],int *nc);
  92. void polynomial_mul(__int64 a[],int na,__int64 b[],int nb,__int64 c[],int *nc);
  93. void polynomial_div(__int64 a[],int na,__int64 b[],int nb,__int64 c[],int *nc,__int64 d[],int *nd);



  94. #define N 1<<16


  95. __int64 a[N];
  96. __int64 b[N];
  97. __int64 c[N<<1];
  98. __int64 d[N];
  99. __int64 t[4];

  100. double PI;


  101. #define _MOD 100
  102. #define fmt "%02I64d"
  103. #define LEN  2

  104. void   add(complex   a,complex   b,complex   *c)      
  105. {
  106.   //_fpreset();
  107.         c->real        =a.real        +        b.real;      
  108.         c->img        =a.img        +        b.img;      
  109. }

  110. void   sub(complex   a,complex   b,complex   *c)      
  111. {
  112.   //_fpreset();
  113.         c->real=a.real-b.real;      
  114.         c->img=a.img-b.img;      
  115. }

  116. void   mul(complex   a,complex   b,complex   *c)      
  117. {      
  118.   //_fpreset();
  119.         c->real        =a.real*b.real  -   a.img*b.img;      
  120.         c->img        =a.real*b.img   +   a.img*b.real;      
  121. }      


  122. void   divi(complex   a,complex   b,complex   *c)      
  123. {      
  124.   //_fpreset();
  125.         c->real        =(a.real*b.real+a.img*b.img)/(b.real*b.real+b.img*b.img);      
  126.         c->img        =(a.img*b.real-a.real*b.img)/(b.real*b.real+b.img*b.img);
  127. }       

  128.    
  129. void bit_reverse_copy(cp a[], int n, cp b[])   
  130. {   
  131.     int i, j, k, u, m;   
  132.     for (u = 1, m = 0; u < n; u <<= 1, ++m);   
  133.     for (i = 0; i < n; ++i)   
  134.     {   
  135.         j = i; k = 0;   
  136.         for (u = 0; u < m; ++u, j >>= 1)   
  137.             k = (k << 1) | (j & 1);   
  138.         b[k] = a[i];   
  139.         ////printf("b[%d]=%.2lf+%.2lfi\n",k,b[k].real,b[k].img);
  140.     }   
  141. }



  142. void FFT(cp _x[], int n, int flag)   
  143. {   
  144.     static cp x[N << 1]={0.0};   
  145.     int i, j, k, kk, p, m;   
  146.     double alpha;   
  147.    
  148.     cp wn,w,u,t,up,down;
  149.     //_fpreset();
  150.    
  151.     bit_reverse_copy(_x, n, x);
  152.    
  153.     alpha = 2.0 * acos(-1.0);
  154.     if (flag) alpha = -alpha;   
  155.    
  156.     for (i = 1, m = 0; i < n; i <<= 1, ++m);   
  157.    
  158.     for (i = 0, k = 2; i < m; ++i, k <<= 1)   
  159.     {   
  160.         wn.real = cos(alpha / k);
  161.         wn.img  = sin(alpha / k);
  162.         for (j = 0; j < n; j += k)   
  163.         {   
  164.             w.real = 1.0;  
  165.             w.img  = 0.0;
  166.             kk = k >> 1;   
  167.             for (p = 0; p < kk; ++p)   
  168.             {      
  169.                 mul(w, x[j + p + kk],&t);
  170.                 add(x[j + p],t,&up);
  171.                 sub(x[j + p],t,&down);
  172.                
  173.                 x[j + p]      = up;   
  174.                 x[j + p + kk] = down;   
  175.                
  176.                 mul(w,wn,&u);
  177.                 w = u;   
  178.             }   
  179.         }   
  180.     }   
  181.     memcpy(_x, x, sizeof(cp) * n);   
  182. }   


  183. __int64 IsTrue(__int64 a[],int na)
  184. { int i;__int64 t=0;
  185.   if (na)
  186.   {
  187.     for (i=0;i<na;i++) t |= a[i];
  188.   }
  189.   return t;
  190. }



  191. __int64 polynomial_cmp(__int64 a[],int na,__int64 b[],int nb)
  192. {
  193.   static __int64 pe[N];int te;__int64 t;
  194.   polynomial_sub(a,na,b,nb,pe,&te);
  195.   if (0==te) t|=-1;
  196.   else t=(__int64)IsTrue(pe,te);
  197.   return t;
  198. }

  199. void polynomial_add(__int64 a[], int na, __int64 b[], int nb, __int64 c[], int *nc)
  200. {
  201.   int i,j,k;__int64* pD;
  202.   
  203.   if (na>nb)
  204.   {
  205.     k=nb;
  206.     j=na;
  207.     pD=a;
  208.   }
  209.   else
  210.   {
  211.     k=na;
  212.     j=nb;
  213.     pD=b;
  214.   }
  215.   
  216.   
  217.   *nc=j;
  218.   
  219.   for (i=0;i<k;i++) c[i]=a[i]+b[i];

  220.   for (i=k;i<j;i++) c[i]=pD[i];

  221.   //convertd(c,*nc,c,nc)
  222. }



  223. void polynomial_sub(__int64 a[], int na, __int64 b[], int nb, __int64 c[], int *nc)
  224. {
  225.   int i,j=na,k=nb;
  226.   
  227.   if (j<k)
  228.   {
  229.     *nc=0;
  230.   }
  231.   else
  232.   {
  233.    
  234.     for (i=0;i<k;i++) c[i] =a[i]-b[i];
  235.     for (   ;i<j;i++) c[i] =a[i];
  236.    
  237.     for (i=0;i<j-1;i++)
  238.     {
  239.       //printf("c[%d]=%I64d\n",i,c[i]);
  240.       if (c[i]<0)
  241.       {
  242.         c[i]+=_MOD;
  243.         c[i+1]-=1;
  244.       }
  245.     }
  246.    
  247.     trim(c,&j);
  248.     ////printf("i=%d\n",i);
  249.     if (c[i]<0) *nc=0;
  250.     else *nc=max(j,1);
  251.     ////printf("i=%d\n",i);
  252.   }
  253. }


  254. void polynomial_mul(__int64 a[], int na, __int64 b[], int nb, __int64 c[], int *nc)   
  255. {   
  256.     static cp x[N << 1], y[N << 1],u[N << 1];
  257.     int i, n;
  258.     //_fpreset();
  259.    
  260.    
  261.     i = max(na, nb) << 1;   
  262.     for (n = 1; n < i; n <<= 1);
  263.    
  264.     for (i = 0; i < na; ++i)
  265.     {
  266.       x[i].real = a[i];  
  267.       x[i].img  = 0;
  268.       ////printf("x[%i]=%.2lf+%.2lfi\n",i,x[i].real,x[i].img);
  269.     }
  270.    
  271.     for (; i < n; ++i)
  272.     {
  273.       x[i].real = 0;   
  274.       x[i].img  = 0;
  275.     }
  276.    
  277.     FFT(x, n, 0);   
  278.    
  279.    
  280.     for (i = 0; i < nb; ++i)
  281.     {
  282.       y[i].real = b[i];   
  283.       y[i].img  = 0;
  284.       ////printf("y[%i]=%.2lf+%.2lfi\n",i,y[i].real,y[i].img);
  285.     }
  286.    
  287.     for (; i < n; ++i)
  288.     {
  289.       y[i].real = 0;   
  290.       y[i].img  = 0;
  291.     }
  292.    
  293.     FFT(y, n, 0);   
  294.    
  295.     for (i = 0; i < n; ++i)
  296.     {
  297.       ////printf("x[%i]=%.2lf+%.2lfi\n",i,x[i].real,x[i].img);
  298.       ////printf("y[%i]=%.2lf+%.2lfi\n",i,y[i].real,y[i].img);
  299.       mul(x[i],y[i],&u[i]);   
  300.       ////printf("u[%i]=%.2lf+%.2lfi\n",i,u[i].real,u[i].img);
  301.     }
  302.    
  303.     FFT(u, n, 1);   
  304.    
  305.     for (i = 0; i < n; ++i)     
  306.     {   
  307.         ////printf("c[%d] .lf = %.53lf\n",i,u[i].real / n + 0.5);
  308. #ifdef x86_xp
  309.         c[i] = _ftol2(u[i].real / n + 0.5);
  310. #else
  311.         c[i] = (__int64)(u[i].real / n + 0.5);
  312. #endif         ////printf("c[%d]  I64d = %I64d\n",i,c[i]);
  313.     }   
  314.     for (i = na + nb - 1; i > 1 && !c[i - 1]; --i);
  315.     *nc = i;
  316. }   


  317. void polynomial_div(__int64 a[], int na, __int64 b[], int nb, __int64 c[], int *nc,__int64 d[],int *nd)   
  318. {   
  319.   static __int64 pa[N],pb[N],pc[N];
  320.   int i,j,k,t;
  321.   int ta,tca,tb,tc,te,rc;
  322.   __int64 t0,t1,t2,tt;
  323.   __int64 *pca;
  324.   signed __int64 flag;
  325.   
  326.   if (na<nb)
  327.   {
  328.     c[0]=0;
  329.     *nc =1;
  330.     for (i=0;i<na;i++) d[i]=a[i];
  331.     *nd = na;
  332.   }
  333.   else
  334.   {
  335.         for (i=0,ta=na;i<na;i++) pa[i]=a[i];
  336.         
  337.         for (i=0,tb=nb;i<nb;i++) pb[i]=b[i];
  338.         
  339.         for (i=0,*nc=0;i<na;i++) c[i]&=0;
  340.         
  341.         for (k=ta-tb,j=k,*nc=k+1;j>=0;j--)
  342.         {
  343.           pca=&pa[j];
  344.           tca=tb;
  345.          
  346.          
  347.           flag = polynomial_cmp(pca,tca,pb,tb);

  348.          
  349.           if (flag>0)//pca>pb
  350.           {
  351.             t0=pca[tca-1];
  352.             tt=pb[tb-1];
  353.             t1=t0 / (tt+1);
  354.             t2=t0 / tt;
  355.             convertd(pca,tca,pca,&tca);
  356.             
  357.             //printf("line:%d t1=%I64d,t2=%I64d,tt=%I64d\nt0=%I64d\t\n",__LINE__,t1,t2,tt,t0);
  358.             
  359.             tt=(t1+t2+1)/2;
  360.             
  361.             while (t1!=t2)
  362.             {
  363.               tt=(t1+t2+1)/2;
  364.               pc[0]=tt;tc=1;
  365.               
  366.               //printf("line:%d t1=%I64d,t2=%I64d,tt=%I64d\n",__LINE__,t1,t2,tt);
  367.               //printf("line:%d,tb=%d,pb=\t",__LINE__,tb);
  368.               //print(pb,tb);
  369.               
  370.               
  371.               polynomial_mul(pc,tc,pb,tb,pc,&tc);
  372.               convertd(pc,tc,pc,&tc);
  373.               //printf("line:%d,tca=%d,pca=\t",__LINE__,tca);
  374.               //print(pca,tca);
  375.               //printf("line:%d,tc=%d,pc=\t",__LINE__,tc);
  376.               //print(pc,tc);
  377.               
  378.               flag = polynomial_cmp(pca,tca,pc,tc);
  379.               
  380.               if (flag==0)
  381.               {
  382.                 break;
  383.               }
  384.               else if (flag>0)
  385.               {
  386.                 t1=tt;
  387.               }
  388.               else
  389.               {
  390.                 if (tt-t1<=1)
  391.                 {
  392.                   tt=t1;
  393.                   break;
  394.                 }
  395.                 t2=tt;
  396.               }
  397.         
  398.             }
  399.             /*
  400.             printf("line:%d,tt=%I64d\n",__LINE__,tt);
  401.             */
  402.             c[j]=tt;
  403.             
  404.             
  405.             pc[0]=tt;
  406.             tc=1;
  407.             
  408.             polynomial_mul(pc,tc,pb,tb,pc,&tc);
  409.             convertd(pc,tc,pc,&tc);
  410.             /*
  411.             printf("line:%d,tca=%d,pca=\t",__LINE__,tca);
  412.             print(pca,tca);
  413.             printf("line:%d,tc=%d,pc=\t",__LINE__,tc);
  414.             print(pc,tc);
  415.             */
  416.             polynomial_sub(pca,tca,pc,tc,pca,&tca);
  417.             convertd(pa,ta,pa,&ta);
  418.             trim(pa,&ta);
  419.             /*
  420.             printf("line:%d,tca=%d,pca=\t",__LINE__,tca);
  421.             print(pca,tca);

  422.             printf("line:%d,ta=%d,pa=\t",__LINE__,ta);
  423.             print(pa,ta);
  424.             */
  425.             
  426.           }
  427.           else if (flag==0)
  428.           {
  429.             c[j]=1;
  430.             /* */
  431.             polynomial_sub(pca,tca,pb,tb,pca,&tca);
  432.             convertd(pa,ta,pa,&ta);
  433.             trim(pa,&ta);
  434.             
  435.           }
  436.           else c[j]=0;
  437.          
  438.           if ((tca==tb)&&(ta>tb))
  439.           {
  440.               pa[ta-2]+=_MOD*pa[ta-1];
  441.               pa[ta-1]&=0;
  442.               ta-=1;
  443.               j=max(j,1);
  444.           }
  445.           else if (tca>tb)
  446.           {
  447.             printf("line:%d Error\n",__LINE__);
  448.             system("pause");
  449.           }
  450.           //printf("*****************************************************\n");
  451.         }
  452.         
  453.         convertd(pa,ta,pa,&ta);  
  454.         for (i=0;i<ta;i++) d[i]=pa[i];
  455.         *nd = max(i,1);
  456.         
  457.         
  458.         convertd(c,*nc,c,nc);
  459.         trim(c,nc);
  460.         //print(c,*nc);
  461.         
  462.         //free(pheap);
  463.       
  464.    
  465.   }
  466.   
  467. }   


  468. void convert(char *s, __int64 a[], int * n)   
  469. {   
  470.     int len = strlen(s), i, j, k,r;
  471.     for (r = 0, i = len - LEN; i >= 0; i -= LEN)   
  472.     {   
  473.         for (j = k = 0; j < LEN; ++j)  
  474.         {  
  475.             k = k * 10 + (s[i + j] - '0');   
  476.         }
  477.         a[r++] = k;   
  478.         ////printf("@207 k = %d\n",k);
  479.     }   
  480.     i += LEN;   
  481.     if (i)   
  482.     {   
  483.         for (j = k = 0; j < i; ++j)
  484.         {
  485.             k = k * 10 + (s[j] - '0');   
  486.         }
  487.         a[r++] = k;   
  488.         ////printf("@217 k = %d\n",k);
  489.     }   
  490.     *n=r;
  491.     ////printf("@220 r = %d\n",r);
  492. }   

  493. void trim(__int64 s[],int *ns)
  494. {
  495.   int i,j;
  496.   j=*ns;
  497.   if (j>1)
  498.   {
  499.     while (j>1&&s[j-1]==0) j--;
  500.     *ns=j;
  501.   }
  502. }
  503. void convertd(__int64 s[],int ns, __int64 a[], int * n)   
  504. {   
  505.     int i,ii;__int64 t1,t2;
  506.    

  507.     if (ns)
  508.     {
  509.       for (i=0,t1=0; i < ns; ++i)   
  510.       {   
  511.         t2 = t1 + s[i];   
  512.         a[i] = t2 % _MOD;   
  513.         t1 = t2 / _MOD;   
  514.       }   
  515.       for (; t1; t1 /= _MOD) a[i++] = t1 % _MOD;   

  516.       *n=i;
  517.     }
  518.     ////printf("@262 r = %d\n",r);
  519. }

  520. void print(__int64 a[], int n)   
  521. {   
  522.     if (n)
  523.     {
  524.       printf("%I64d", a[--n]);   
  525.       while (n>0) printf(fmt, a[--n]);   
  526.     }
  527.     else printf("Error\n");
  528.     puts("");   
  529. }   


  530. char buf[N + 10];   

  531. #ifndef EOF
  532.   #define EOF (-1)
  533. #endif

  534. #ifndef false
  535.   #define false 0
  536. #endif

  537. #ifndef true
  538.   #define true 1
  539. #endif



  540. __int64 ddd (__int64 a[],int* na)
  541. {
  542.   int i,k;__int64 t=0;
  543.   
  544.   ////printf("na=%d\n",*na);
  545.   if ((1>=a[0]) && (1>=*na)) goto done;

  546.   for (i=0;i<*na,0==a[i];++i);
  547.   
  548.   ////printf("a[%d]=%I64d\n",i,a[i]);
  549.   a[i]--;
  550.   ////printf("a[%d]=%I64d\n",i,a[i]);
  551.   if (k=*na,0==a[--k]) *na-=1;
  552.   
  553.   ////printf("i=%d,na=%d\n",i,*na);
  554.   
  555.   for (k=0;k<i;k++) a[k]+=_MOD-1;
  556.   
  557.   for (i=0;i<=*na;t |= a[i++]);
  558.   
  559.   *na=max(*na,1);
  560.   
  561.   //system("pause");
  562. done:  
  563.   return t;
  564. }



  565. int mainCRTStartup()   
  566. {   
  567.     int i,na, nb, nc, nd, nt,sign,e;   
  568.     __int64 t1, t2,M;double f1,f2;
  569.     long Ticks;
  570.   
  571.     //conc();
  572.     printf("******************************************************\n");
  573.     printf("*                                                    *\n");
  574.     printf("******************************************************\n");
  575.     nc&=0;
  576.     while (scanf("%s", buf) != EOF)   
  577.     {   
  578.       if (buf[0]== 'c')
  579.       {
  580.         system("cls");
  581.         continue;
  582.       }
  583.       else if (buf[0]== 'q')
  584.       {
  585.         break;
  586.       }
  587.       else if ((nc<N) && ( \
  588.                 (buf[0]== '+') || \
  589.                 (buf[0]== '-') || \
  590.                 (buf[0]== '*') || \
  591.                 (buf[0]== '/') || \
  592.                 (buf[0]== '!')    \
  593.                ))
  594.       {
  595.         for (i=0;i<nc;i++) a[i]=c[i];
  596.         na=nc;
  597.       }
  598.       else
  599.       {
  600.         convert(buf, a, &na);
  601.         scanf("%s", buf);
  602.       }
  603.       
  604.       if      (buf[0]== '+')
  605.       {
  606.         
  607.           scanf("%s", buf);
  608.           convert(buf, b, &nb);   
  609.           polynomial_add(a, na, b, nb, c, &nc);
  610.           convertd(c,nc,c,&nc);  
  611.           print(c, nc);
  612.       }
  613.       else if (buf[0]== '-')
  614.       {
  615.           scanf("%s", buf);
  616.           convert(buf, b, &nb);   
  617.           polynomial_sub(a, na, b, nb, c, &nc);
  618.           convertd(c,nc,c,&nc);  
  619.           print(c, nc);
  620.       }
  621.       else if (buf[0]== '*')
  622.       {
  623.           scanf("%s", buf);
  624.           convert(buf, b, &nb);   
  625.          
  626.           polynomial_mul(a, na, b, nb, c, &nc);
  627.           convertd(c,nc,c,&nc);  
  628.           print(c, nc);
  629.       }
  630.       else if (buf[0]== '/')
  631.       {
  632.           scanf("%s", buf);
  633.           convert(buf, b, &nb);
  634.          
  635.           polynomial_div(a, na, b, nb, c, &nc,d,&nd);
  636.          
  637.          
  638.           convertd(c,nc,c,&nc);  
  639.           convertd(d,nd,d,&nd);
  640.           print(c, nc);
  641.           print(d, nd);
  642.       }
  643.       else if (buf[0]== '!')
  644.       {
  645.           if (na<=8)
  646.           {
  647.             t[0]=a[0];
  648.             t[1]=a[1];
  649.             nt=na;
  650.             
  651.             while (ddd(t,&nt))
  652.             {
  653.               polynomial_mul(a, na, t, nt, c, &nc);
  654.               convertd(c,nc,a,&na);
  655.             }
  656.             
  657.             convertd(c,nc,c,&nc);
  658.             print(c, nc);
  659.           }      
  660.       }
  661.       else if (buf[0]== 'c')
  662.       {
  663.         system("cls");
  664.       }
  665.       else if (buf[0]== 'q')
  666.       {
  667.         break;
  668.       }
  669.       else
  670.       {
  671.           printf("+-*/!\n");
  672.       }   
  673.       printf("******************************************************\n");
  674.     }

  675.     return 0;   
  676. }

复制代码

hello_world.c

15.64 KB, 下载次数: 2

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2016-8-5 17:43:10 | 显示全部楼层
建议将add mul divi等函数重命名为complex_add complex_mul complex_div,然后将这些不导出的函数用static修饰。
回复 赞! 靠!

使用道具 举报

发表于 2018-1-14 10:18:48 | 显示全部楼层
支持楼主。不擅长c代码都能写这么好!最主要是代码贴出来了很方便参考。
就是有些函数部分地方我看不懂,能加些注释就好了
回复 赞! 靠!

使用道具 举报

发表于 2018-1-14 12:51:48 | 显示全部楼层
支持楼主+1
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-12-22 21:39 , Processed in 0.040021 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表