8位单片机,大数运算,可以运算任意位数的乘除法
#include int nByNumLen, nNumLen, nTempLen, nResultLen ; int i,j,k,l; //结果长度 nByNumLen = strlen(szByNum); nNumLen = strlen(szNum); nResultLen = nNumLen+ nByNumLen; //乘数长度从右向左依次 l = nResultLen-1; for (i = nNumLen-1; i >= 0; i--) { nTempLen = l; for (j = nByNumLen-1; j >= 0; j--, nTempLen--) { //结果第一次从最后一位开始,第二次从倒数第二位开始放 aryResult[nTempLen] = aryResult[nTempLen] + (szNum[i] - 0) * (szByNum[j] -0); } //进位处理 for (k = l; k >0; k--) //从后往前处理 { if (aryResult[k] > BIT) { aryResult[k-1] = aryResult[k-1] + aryResult[k] / BIT; aryResult[k] = aryResult[k] % BIT; } } //下一次得从倒数第二位开始 l--; } for(nResultLen=nResultLen-1;nResultLen>=0;nResultLen--) //变成字符串 { aryResult[nResultLen]+=0; _nop_(); } _nop_(); int nByNumLen, nNumLen, nTempLen, nResultLen ; int j,k,l=0; nByNumLen = strlen(szByNum); nNumLen = strlen(szNum); nResultLen = nByNumLen - nNumLen+1; //估计商数的长度 //将除数和被除数变成10进制数字 for(j=nByNumLen-1;j>=0;j--) { szByNum[j] -=0; } for(j=nNumLen-1;j>=0;j--) { szNum[j] -= 0; } ///////////////////////////////除法就是减法 ? for(j=nResultLen-1;j>=0;j--) { quotient[l]=0; while(1) { quotient[l]++; //商数加1 for(k=nNumLen-1;k>=0;k--) //减除数的长度即可 { szByNum[k+l]-=szNum[k]; //减掉除数 if(szByNum[k+l]<0) { //if((l!=0)||(k+l>1)) //第一次防止借位借到-1位 if(k+l>0) { szByNum[k+l-1]-=1; //借位=10 szByNum[k+l]+=BIT; } } } //(szByNum[0]<0)||( if(((l==0)&&(szByNum[l]<0)) //符号判断,看有负数没? ||((l>0)&&(szByNum[l-1]<0))) { quotient[l]--; for(k=nNumLen-1;k>=0;k--) { szByNum[k+l]+=szNum[k]; //变成了负数,要加回来 if(szByNum[k+l]>=BIT) { if(k+l>0) //第一次防止借位借到-1位 { szByNum[k+l-1]+=1; szByNum[k+l]-=BIT; } } } _nop_(); break; } } quotient[l]+=0; //转为ASCII l++; } for(j=l;j { szByNum[j]+=0; } *remainder = &szByNum[l]; quotient[l] = ;
#include "stdio.h"
#include "string.h"
#include "intrins.h"
#define BIT 10
//WriteBy :Rlogin Xukaiming
void BigNumMul(char szByNum[], char szNum[], char aryResult[])
{
}
void BigNumDiv(char szByNum[], char szNum[], char quotient[],char **remainder )
{
}

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码
相关文章
-
嵌入式系统 2016-11-25