找回密码
 欢迎注册
查看: 1861|回复: 6

[原创] 最优除法步骤试验(附 源代码)

[复制链接]
发表于 2024-1-5 12:32:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
      
       在写大整数的除法过程中,包括本人在内的很多人,因为没有掌握除法的内在联系,走了弯路。
       本人用的除法采用的是\(10^8\)进制,最近在扩展到\(10^9\)进制的过程中,就遇到了困难。心想:难道一个进制就要单独写一个除法程序吗?
重新思考后,发现大整数的加法、减法、乘法(硬乘)都有一个共同的特征规律:

1)        输入数据能采用任意\(10^k\)进制,运算结果不受影响(因为计算机字长限制以及编译器不支持的进制除外)。
2)        运算过程中不需要改变输入数据的结构和大小

       结合加法、减法、乘法(硬乘)的共同特征规律,我们有理由认为,除法的运算规律也应当如此。
       当我们按照上面两个特征规律,结合“笔算除法的最优估商”,写出笔算除法程序时,我们不但得到了商,还同时得到了余数,这个余数是笔算除法的必然结果。
各位爱好者可以查看一下自己写的除法程序,如果余数不是自然得到,而是要添加一些步骤才得到,那么一定是运算过程中“改变了输入数据的结构和大小”。
下面是测试源代码。
说明:源代码做在一个文件中,在debug 模式下编译通过。


毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2024-1-5 12:35:22 | 显示全部楼层

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <string.h>
  4. #include <wtypes.h>

  5. /* 变量长度 */
  6. typedef unsigned int UINT32;                                        /*  定义三十二位无符号变量 */
  7. typedef unsigned __int64 UINT64;                                /*  定义六十四位无符号变量 */

  8. /* 一些宏定义 */
  9. #define  BASE  1000000                          /*  大数的基数(10^k进制,可修改)*/
  10. #define  BASE_EXP   6                                                        /*  基数的指数 k,与基数同时修改 */

  11. #define  DIVID 3000                                                                /*  被除数的数字个数(可修改)*/
  12. #define         DIVIS 2000                                                                /*  除数的数字个数(可修改)*/

  13. /* 函数声明,除法函数 */
  14. int DivAbs( UINT32 *dividend, UINT32 *divisor,
  15.                          UINT32 *quotient,UINT32 *remainder,int *CtrL);

  16. int DivHelp(UINT32  *Wdiv, UINT32  *divisor, UINT32 *qut, int *CtrL);
  17. int MulSubAdd(UINT32 *Wdiv, UINT32 *divisor, int *CtrL);

  18. /* 函数声明,辅助函数 */
  19. int _Output(UINT32 *quotient, UINT32 *remainder, int *CtrL);
  20. int _Input(UINT32 *dividend, UINT32 *divisor, int *CtrL);
  21. void _RandomNumbers(char  *a, int lenA);
  22. int _StringToDigit(UINT32 *result, char *str);

  23. /* 函数声明,结果检测(非必须) */
  24. int _resultTest(UINT32 *dividend,UINT32 *divisor,UINT32 *quotient,UINT32 *remainder,int *CtrL);

  25. /* 全局变量 */
  26. static char a[DIVID+2]={0};                                                        /*  被除数a */
  27. static char b[DIVIS+2]={0};                                                        /*  除数b */

  28. /////////////////////////////////////////////////////////////////////////////////////////
  29. int        main()
  30. {
  31.                 UINT32  dividend[DIVID/BASE_EXP+3]={0};                                        //dividend        被除数
  32.                 UINT32  divisor[DIVIS/BASE_EXP+3]={0};                                        //divisor        除数
  33.                 UINT32  quotient[DIVID/BASE_EXP-DIVIS/BASE_EXP+5]={0};        //quotient        商
  34.                 UINT32  remainder[DIVIS/BASE_EXP+7]={0};                                //remainder        余数
  35.                 int CtrL[10]={0};
  36.                
  37.                 //CtrL ,        控制数组,                代替结构体传送必须的各个参数
  38.                 //CtrL[0]=dividendLEN                传送被除数(数组)的长度       
  39.                 //CtrL[1]=divisorLEN                传送除数(数组)的长度
  40.                 //CtrL[2]=quotientLEN                传送商(数组)的长度
  41.                 //CtrL[3]=remainderLEN                传送余数(数组)的长度
  42.        
  43.                 _Input(dividend,divisor,CtrL);

  44.                 DivAbs(dividend,divisor,quotient,remainder,CtrL);//// 绝对值除法,求商和余数

  45.                 _Output(quotient,remainder,CtrL);

  46.                 _resultTest(dividend,divisor,quotient,remainder,CtrL);
  47.         
  48.                 return 0;
  49. }


  50. int DivAbs( UINT32 *dividend, UINT32 *divisor,UINT32 *quotient,UINT32 *remainder,int *CtrL)////除法开始。
  51. {
  52.         //数组采用10^k进制,数组的高位对应较大的下标,数组的低位对应较小的下标
  53.        
  54.         //CtrL[0]=dividendLEN                传送被除数(数组)的长度       
  55.         //CtrL[1]=divisorLEN                传送除数(数组)的长度
  56.         //CtrL[2]=quotientLEN                传送商(数组)的长度
  57.         //CtrL[3]=remainderLEN                传送余数(数组)的长度
  58.         int dividendLEN=CtrL[0];
  59.         int divisorLEN=CtrL[1];
  60.         int remainderLEN=0;
  61.         int i;

  62.         i=BASE_EXP;
  63.         remainderLEN=1;////临时借用变量remainderLEN
  64.         do
  65.         {
  66.                 remainderLEN*=10;
  67.                 i--;
  68.         }while(i>0);

  69.         if (remainderLEN !=BASE)
  70.         {
  71.                 printf("您输入的 BASE 的零的个数和指数 BASE_EXP 不相等\n");
  72.                 exit(1);
  73.         }
  74.        
  75.         if ( BASE>1000000)
  76.         {
  77.                 printf("大整数的基数超过10^6,超过计算机的字长,本程序不涉及,请输入的大整数基数<=10^6");
  78.                 exit(1);
  79.         }
  80.        
  81.         if ( divisorLEN==1)
  82.         {
  83.                 printf("除数为一个limb,属于多精度除以单精度的情况,本程序不涉及。");
  84.                 exit(1);
  85.         }

  86.         if (divisorLEN == 0)///若除数为零,
  87.         {
  88.                 printf("err:divisor is zeor\n");
  89.                 exit(1);
  90.         }
  91.        
  92.         if ((dividendLEN == 0) || (dividendLEN < divisorLEN))///若被除数为零,或被除数小于除数,
  93.         {
  94.                 printf("%d",0);
  95.                 exit(1);
  96.         }
  97.        
  98.         for(i=0; i<dividendLEN; i++)//拷贝
  99.         {
  100.                 remainder[i]=dividend[i];//////        remainder[]是被除数的拷贝,既是工作数组,又得到余数
  101.         }
  102.         remainderLEN=dividendLEN;
  103.        
  104.         DivHelp(remainder,divisor,quotient,CtrL);//除法

  105.         i = DIVIS/BASE_EXP+6;
  106.         while ((remainder[i] == 0) && (i >= 0))         /// 计算余数长度
  107.         {
  108.                 i--;
  109.         }
  110.         CtrL[3]=i+1;
  111.        
  112.         i = dividendLEN-divisorLEN;
  113.         while ((quotient[i] == 0) && (i >= 0))         /// 计算商 的长度
  114.         {
  115.                 i--;
  116.         }
  117.         CtrL[2]=i+1;

  118.         return 0;
  119. }

  120. int DivHelp(UINT32  *Wdiv, UINT32  *divisor, UINT32 *qut, int *CtrL)
  121. {       
  122.         //    Wdiv[];                                        被除数的工作数组,同时也是余数数组
  123.         //     qut[];                                        商
  124.        
  125.         //CtrL[0]                                                传送被除数(数组)的长度       
  126.         //CtrL[1]                                                传送除数(数组)的长度
  127.         //CtrL[4]                                                试商由一确定为零时的判断依据       
  128.         //CtrL[5]                                                随时刷新的被除数最高位下标(用于除法对位),
  129.         //CtrL[6]                                                传送试商的值                                                       
  130.         //CtrL[8]                                                对位计算
  131.        
  132. //        UINT32        TempArray[DIVIS/BASE_EXP+5] = { 0 };///存储试商与除数相乘所得的结果
  133.         UINT64  D = 0;
  134.         UINT64  C = 0;
  135.         int divisorMaxLable=CtrL[1]-1;        // 除数数组的最大下标
  136.         int        changeLable=CtrL[0]-1;                // 随时刷新的被除数起始下标,初值 CtrL[0]-1      
  137.         int i;
  138.        
  139.         CtrL[4] = 0;
  140.         CtrL[5]=CtrL[0]-1;                                //随时刷新的被除数起始下标,初值 CtrL[0]-1 做首次计算   
  141.     CtrL[8] = 0;
  142.        
  143.         i = changeLable - divisorMaxLable;                //除法总的循环次数的初始值(从ctrl[0]-ctrl[0] 开始计数)       
  144.         D = UInt32x32To64(divisor[divisorMaxLable], BASE) +(UINT64)divisor[divisorMaxLable - 1];
  145.        
  146.         while (i >= 0)//-----//除法开始
  147.         {
  148.                 C = UInt32x32To64(Wdiv[changeLable], BASE) + (UINT64)Wdiv[changeLable - 1];////-----C=Wdiv[f0]*10^8+Wdiv[f0-1].
  149.                 if ((C < D) || (CtrL[4] == 1))
  150.                 {
  151.                         i--;
  152.                         if(i<0)
  153.                         {
  154.                                 continue;
  155.                         }
  156.                        
  157.                         C *= BASE;
  158.                         C += (UINT64)Wdiv[changeLable - 2];//C=Wdiv[f0]*10^2k+Wdiv[f0-1]*10^k+Wdiv[f0-2]
  159.                         //  three_div_two(Wdiv, divisor,CtrL);
  160.                         CtrL[8] = 1;
  161.                 }
  162.                 CtrL[6] = (int)(C / D);                                                /// 求试商

  163.                 MulSubAdd(Wdiv,divisor,CtrL);                /// 被除数-商*除数
  164.                  
  165.                 if(CtrL[4]==1)continue;
  166.                 qut[i] = CtrL[6];                                                        ////已定商,赋值给数组

  167.                 while ((Wdiv[changeLable] == 0) && (changeLable >= 0))         /// 刷新被除数最高位下标changeLable,用于下一次计算
  168.                 {
  169.                         changeLable--;
  170.                 }
  171.                 i = changeLable - divisorMaxLable;
  172.                 CtrL[5]=changeLable;
  173.                 CtrL[8] = 0;
  174.         }
  175. }///*/////

  176. int MulSubAdd(UINT32 *Wdiv,UINT32 *divisor,int *CtrL)
  177. {
  178.                 //CtrL[1]                                                                传送除数(数组)的长度
  179.                 //CtrL[5]                                                                随时刷新的被除数最高位下标(用于除法对位),
  180.                 //CtrL[6]                                                                传送试商的值       
  181.                 //CtrL[8]                                                                对位计算
  182.        
  183.         UINT32        TempArray[DIVIS/BASE_EXP+7] = { 0 };///临时存储试商与除数相乘所得的结果
  184.         int divisorMaxLable=CtrL[1]-1;                                ///除数数组的最大下标
  185.         int temp,MM;
  186.         int i;
  187.         UINT64 C=0,D=0;

  188.         temp = 0;
  189.         TempArray[divisorMaxLable+1] = 0;
  190.         TempArray[divisorMaxLable+2] = 0;
  191.         for (i= 0; i <= divisorMaxLable; i++)
  192.         {
  193.                 C = UInt32x32To64(divisor[i], CtrL[6]) + temp;/// 乘法。 CtrL[6]是函数传入的试商。C=商*除数;
  194.                 temp = (int)(C / BASE);         
  195.                 TempArray[i] = (int)(C - UInt32x32To64(temp, BASE));
  196.         }
  197.         TempArray[divisorMaxLable + 1] = temp;               
  198.                
  199.         divisorMaxLable+=1;
  200.         if ((temp==0) && (CtrL[8]==0))
  201.         {
  202.                 divisorMaxLable--;
  203.         }

  204.         temp=0;
  205.         MM = CtrL[5] - divisorMaxLable;       
  206.         for (i = 0; i <=divisorMaxLable; i++)////// 减法,被除数-商*除数
  207.         {
  208.                 Wdiv[i+ MM] -= (TempArray[i]+ temp);
  209.                 temp = 0;
  210.                 if (Wdiv[i + MM] >=BASE)
  211.                 {
  212.                         Wdiv[i + MM] += BASE;
  213.                         temp = 1;
  214.                 }
  215.         }

  216.         CtrL[4] = 0;
  217.         if (temp == 1) /// temp==1表示余数是负的。说明试商比真实商大了一。
  218.         {
  219.                 temp = 0;
  220.                 for (i = 0; i <=divisorMaxLable; i++)////
  221.                 {
  222.                         Wdiv[i + MM] += divisor[i] + temp;// 加法,余数为负数时做一次加法
  223.                         temp = 0;
  224.                         if (Wdiv[i +MM] >= BASE)
  225.                         {
  226.                                 Wdiv[i + MM] -= BASE;
  227.                                 temp = 1;
  228.                         }/////
  229.                 }
  230.        
  231.                 if (CtrL[6] == 1)///当temp1==1和CtrL[6]==1同时成立时。说明真实的商应该是零。
  232.                 {
  233.                         CtrL[4] = 1; //强制让被除数增加一项。
  234.                 }
  235.                 CtrL[6] -= 1;//余数为负时,试商减去一
  236.         }
  237.         return (CtrL[6]);
  238. }

  239. int _Output(UINT32 *quotient,UINT32 *remainder,int *CtrL)/////输出商和余数
  240. {
  241.         //CtrL[2]=quotientLEN                传送商(数组)的长度
  242.         //CtrL[3]=remainderLEN                传送余数(数组)的长度
  243.         int quotientLEN = CtrL[2];
  244.         int remainderLEN =CtrL[3];
  245.         int i;

  246.         printf("被除数\n");///输出被除数
  247.         printf("%s",a);
  248.         printf("\n");
  249.         printf("\n");

  250.         printf("除数\n");///输出除数
  251.         printf("%s",b);
  252.         printf("\n");
  253.         printf("\n");
  254.         printf("\n");
  255.        
  256.         switch (BASE_EXP)///输出商和余数
  257.         {
  258.         case 6:
  259.                 printf("所得商\n");
  260.                 printf("%d", quotient[quotientLEN - 1]);
  261.                 for (i = quotientLEN - 2; i >= 0; i--)
  262.                 {
  263.                         printf("%06d", quotient[i]);
  264.                 }
  265.                 printf("\n");
  266.                 printf("\n");

  267.                 printf("所得余数\n");
  268.                 printf("%d", remainder[remainderLEN - 1]);
  269.                 for (i = remainderLEN - 2; i >= 0; i--)
  270.                 {
  271.                         printf("%06d", remainder[i]);
  272.                 }
  273.                 break;
  274.         case 5:
  275.                 printf("所得商\n");
  276.                 printf("%d", quotient[quotientLEN - 1]);
  277.                 for (i = quotientLEN - 2; i >= 0; i--)
  278.                 {
  279.                         printf("%05d", quotient[i]);
  280.                 }
  281.                 printf("\n");
  282.                 printf("\n");

  283.                 printf("所得余数\n");
  284.                 printf("%d", remainder[remainderLEN - 1]);
  285.                 for (i = remainderLEN - 2; i >= 0; i--)
  286.                 {
  287.                         printf("%05d", remainder[i]);
  288.                 }
  289.                 break;
  290.         case 4:
  291.                 printf("所得商\n");
  292.                 printf("%d", quotient[quotientLEN - 1]);
  293.                 for (i = quotientLEN - 2; i >= 0; i--)
  294.                 {
  295.                         printf("%04d", quotient[i]);
  296.                 }
  297.                 printf("\n");
  298.                 printf("\n");

  299.                 printf("所得余数\n");
  300.                 printf("%d", remainder[remainderLEN - 1]);
  301.                 for (i = remainderLEN - 2; i >= 0; i--)
  302.                 {
  303.                         printf("%04d", remainder[i]);
  304.                 }
  305.                 break;
  306.         case 3:
  307.                 printf("所得商\n");
  308.                 printf("%d", quotient[quotientLEN - 1]);
  309.                 for (i = quotientLEN - 2; i >= 0; i--)
  310.                 {
  311.                         printf("%03d", quotient[i]);
  312.                 }
  313.                 printf("\n");
  314.                 printf("\n");

  315.                 printf("所得余数\n");
  316.                 printf("%d", remainder[remainderLEN - 1]);
  317.                 for (i = remainderLEN - 2; i >= 0; i--)
  318.                 {
  319.                         printf("%03d", remainder[i]);
  320.                 }
  321.                 break;
  322.         case 2:
  323.                 printf("所得商\n");
  324.                 printf("%d", quotient[quotientLEN - 1]);
  325.                 for (i = quotientLEN - 2; i >= 0; i--)
  326.                 {
  327.                         printf("%02d", quotient[i]);
  328.                 }
  329.                 printf("\n");
  330.                 printf("\n");

  331.                 printf("所得余数\n");
  332.                 printf("%d", remainder[remainderLEN - 1]);
  333.                 for (i = remainderLEN - 2; i >= 0; i--)
  334.                 {
  335.                         printf("%02d", remainder[i]);
  336.                 }
  337.                 break;
  338.         case 1:
  339.                 printf("所得商\n");
  340.                 printf("%d", quotient[quotientLEN - 1]);
  341.                 for (i = quotientLEN - 2; i >= 0; i--)
  342.                 {
  343.                         printf("%01d", quotient[i]);
  344.                 }
  345.                 printf("\n");
  346.                 printf("\n");

  347.                 printf("所得余数\n");
  348.                 printf("%d", remainder[remainderLEN - 1]);
  349.                 for (i = remainderLEN - 2; i >= 0; i--)
  350.                 {
  351.                         printf("%01d", remainder[i]);
  352.                 }
  353.                 break;
  354.         }
  355.         printf("\n");
  356.         return 0;
  357. }

  358. int _Input(UINT32 *dividend,UINT32 *divisor,int *CtrL)
  359. {
  360.                 //CtrL[0]=dividendLEN        传送被除数(数组)的长度       
  361.                 //CtrL[1]=divisorLEN        传送除数(数组)的长度

  362.                 _RandomNumbers(a,DIVID);////产生DIVID个数字的被除数
  363.                 _RandomNumbers(b,DIVIS);////产生DIVIS个数字的除数
  364.                
  365.                 CtrL[0] = _StringToDigit(dividend, a);///将产生的数字字符存入数组中
  366.                 CtrL[1] = _StringToDigit(divisor, b);
  367.                 return 0;
  368. }

  369. void _RandomNumbers(char  *a, int lenA)////产生多位数字的十进制随机数
  370. {
  371.         int i;
  372.         UINT32 seed;

  373.         seed = (UINT32)time(0);
  374.         srand(rand() + seed);
  375.        
  376.                 do
  377.                 {
  378.                         a[0] = rand() % 10;////do循环确保随机数的第一位数字非零。
  379.                         a[0] += 48;
  380.                 } while (a[0] == 48);

  381.                 for (i = 1; i < lenA; i++)
  382.                 {
  383.                         a[i] = 48 + rand() % 10;
  384.                 }
  385.                 a[i] = '\0';
  386.        
  387. }////*////

  388. int _StringToDigit(UINT32 *result, char *str)////辅助函数。将字符数组转换为数字数组,按10^k进制存入数组中
  389. {
  390.         int step=0;
  391.         int strInteger;
  392.         int strRemainder;
  393.         int i,j;
  394.        
  395.         strInteger = strlen(str) / BASE_EXP;////将字符数组str按指数长BASE_EXP分组
  396.         strRemainder = strlen(str) % BASE_EXP;

  397.         if (strRemainder == 0)
  398.         {
  399.                 for (j=strInteger-1; j>=0; j--, step += BASE_EXP)
  400.                 {
  401.                         for (i=step; i <= step+BASE_EXP- 2; i++)
  402.                         {
  403.                                 result[j] += str[i] - 48;
  404.                                 result[j] *= 10;
  405.                         }
  406.                         result[j] += str[i] - 48;
  407.                 }
  408.         }
  409.         else
  410.         {
  411.                 for (j=0; j<=strRemainder-2; j++)
  412.                 {
  413.                         result[strInteger] += str[j] - 48;
  414.                         result[strInteger] *= 10;
  415.                 }
  416.                 result[strInteger] += str[j] - 48;

  417.                 for (j=strInteger-1; j>=0; j--, strRemainder += BASE_EXP)
  418.                 {
  419.                         for (i = strRemainder; i <= strRemainder+BASE_EXP-2; i++)
  420.                         {
  421.                                 result[j] += str[i] - 48;
  422.                                 result[j] *= 10;
  423.                         }
  424.                         result[j] += str[i] - 48;
  425.                 }
  426.         }

  427.         if (strRemainder == 0)
  428.         {
  429.                 strInteger--;
  430.         }

  431.         return (strInteger + 1);
  432. }

  433. int _resultTest(UINT32 *dividend,UINT32 *divisor,UINT32 *quotient,UINT32 *remainder,int *CtrL)
  434. {
  435.         //CtrL[0]=dividendLEN                传送被除数(数组)的长度       
  436.         //CtrL[1]=divisorLEN                传送除数(数组)的长度
  437.         //CtrL[2]=quotientLEN                传送商(数组)的长度
  438.         //CtrL[3]=remainderLEN                传送余数(数组)的长度

  439.         int i, j;
  440.         UINT64  MIDDLE;
  441.         UINT32 temp,TEMP;
  442.         UINT32 testOne[DIVID/BASE_EXP+3]={0};
  443.         UINT32 testTwo[DIVID/BASE_EXP+3]={0};

  444.         for (i = 0; i < CtrL[1]; i++)
  445.         {
  446.                 temp = 0;
  447.                 TEMP = divisor[i];
  448.                 for (j = 0; j < CtrL[2]; j++)
  449.                 {
  450.                         MIDDLE = UInt32x32To64(TEMP , quotient[j]) + temp + testOne[i + j];
  451.                         temp = (UINT32)(MIDDLE / BASE);
  452.                         testOne[i + j] = (UINT32)(MIDDLE - UInt32x32To64(BASE , temp));
  453.                 }
  454.                 testOne[i + j] = temp;
  455.         }
  456.        
  457.         for (i = 0; i < CtrL[0]; i++)
  458.         {
  459.                 testTwo[i]=        dividend[i]-testOne[i]-temp;
  460.                 temp=0;
  461.                 if(testTwo[i]>=BASE)
  462.                 {
  463.                         testTwo[i]+=BASE;
  464.                         temp=1;
  465.                 }
  466.         }

  467.         printf("\n");
  468.         j=CtrL[3]-1;
  469.                 while(testTwo[j]==remainder[j])
  470.                 {
  471.                         j--;
  472.                         if(j<0)
  473.                         {
  474.                                 printf("结果正确");
  475.                         }
  476.                 }
  477.             if(j>0)
  478.                 {
  479.                         printf("结果错误");
  480.                 }
  481. printf("\n");
  482. return 0;
  483. }

复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-1-5 12:41:46 | 显示全部楼层


写个屁呀,现在网上有现成的大整数开源算法(我下载后,根本看不懂),比hugecalc还牛逼,只不过你不知道,
我是亲自体验过后才知道
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-1-5 12:48:15 | 显示全部楼层
https://github.com/ILW8/gwnum

好像就这个开源算法库,吊打hugecalc,所以真的没必要再浪费时间了

点评

全是英语,  发表于 2024-1-5 12:51
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-4-7 10:19:12 | 显示全部楼层
无所谓哪个牛逼,最主要的还是学习算法思想吧,理性愉悦嘛。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2024-5-2 10:07:09 | 显示全部楼层
今天发现,除法的结果是正确的,但是检测函数(int _resultTest())考虑不周到,把正确的结果判错了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 18:10 , Processed in 0.028185 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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