大数相除 大数相乘 大数相除是低精度

    xiaoxiao2025-04-11  15

    大数相除代码: //模仿竖式除法 void  division(char * src,int n,int *s,char *dest) {     int len = strlen(src),i,k,t=0;   *s=0;         bool flag = true;    //商是否有了第一个有效位,防止商首部一直出现0        for(i=0,k=0; i<len; i++)     {           t = (*s)*10+(src[i]-48);    //新余数 2         if(t/n>0 || t==0)        //余数为0要修改商         {             dest[k++] = t/n+48,*s = t%n,flag = false;         }        else                    //不够除,修改余数         {             *s = t;    //-42             if(!flag)            //商已经有有效位了,补零                 dest[k++] = '0';         }     }  dest[k]='\0'; } 大数相乘代码 /*  *将在数组中保存的字符串转成数字存到int数组中 */ void getdigits(int *a,char *s) {      int i;      char digit;      int len = strlen(s);      //对数组初始化      for(i = 0; i < N; ++i)            *(a + i) = 0;      for(i = 0; i < len; ++i){            digit = *(s + i);            *(a + len - 1 - i) = digit - '0';//字符串s="12345",因此第一个字符应该存在int数组的最后一个位置      } } /*  *将数组a与数组b逐位相乘以后存入数组c  */ void multiply(int *a,int *b,int *c) {      int i,j;      //数组初始化      for(i = 0; i < 2 * N; ++i)            *(c + i) = 0;   /*    *数组a中的每位逐位与数组b相乘,并把结果存入数组c    *比如,12345*12345,a中的5与12345逐位相乘    *对于数组c:*(c+i+j)在i=0,j=0,1,2,3,4时存的是5与各位相乘的结果    *而在i=1,j=0,1,2,3,4时不光会存4与各位相乘的结果,还会累加上上次相乘的结果.这一点是需要注意的!!!   */      for(i = 0; i < N; ++i)            for(j = 0; j < N; ++j)                  *(c + i + j) += *(a + i) * *(b + j);   /*    *这里是移位、进位   */      for(i = 0; i < 2 * N - 1; ++i)      {            *(c + i + 1) += *(c + i)/10;//将十位上的数向前进位,并加上原来这个位上的数            *(c + i) = *(c + i)%10;//将剩余的数存原来的位置上      } }
    转载请注明原文地址: https://ju.6miu.com/read-1297960.html
    最新回复(0)