#include " string.h " // use for strlen function #include " stdio.h " #define MAX 1000 #define MaxResult 2000 void Calculate( char cArrA[], char cArrB[]) ... { int iArrX[MAX]= ...{0}; int iArrY[MAX]= ...{0}; int iArrSum[MaxResult] = ...{0}; int lenX=0;//计算X长度 int lenY=0;//计算Y长度 printf(" %s ",cArrA); printf(" *%s ",cArrB); printf("------------------------------- "); lenX = (int)strlen(cArrA); lenY = (int)strlen(cArrB); int i=0; int len = lenX; while (len-- > 0) ...{ iArrX[len] = (int)cArrA[i] - 48;//单个字符转换为数字的技巧,哈哈 i++; } i = 0; len = lenY; while (len-- > 0) ...{ iArrY[len] = (int)cArrB[i] - 48; i++; } int arrTemp[MAX+1] = ...{0};//存放中间计算过程相乘所得数 int flag= 0;//输出最终结果时,判断高位是否为0; for (int j=0;j<lenY;j++) ...{ int temp=0; int carry=0;//进位值,逢10进一 int n = 0;//用于中间计算乘法结果位数,用于美化输出中间乘法结果循环参数 //清除中间乘法数组数据 for (int tep=0;tep<(lenX+lenY);tep++) ...{ arrTemp[tep] = 0; } //计算中间乘法 for (int k=0;k<lenX;k++) ...{ temp = iArrX[k]*iArrY[j]+carry; arrTemp[n++] = temp%10; if (temp>=10)//原先计算结果不对是因为写成temp>10 ...{ carry=temp/10; } else ...{ carry = 0;//注意清零 } //注意别遗忘了进位值 if (k==(lenX-1)) ...{ if (carry>0) ...{ arrTemp[n++] = carry; } } } //制作排列效果,使得更像人工计算方式 //最后一次中间乘法 打印一个“+”号 if (j==(lenY-1)) ...{ printf("+"); } //如果中间乘法中最高位乘法有进位,就少打一个空格, //依据n-lenX来判断,如果最高位没有进位,那么lenX等于n else ...{ int rr = lenY-j+1+lenX-n; while (rr-- > 0) ...{ printf(" ");//打印空格 } } //输出每次中间乘法的结果 for (int m=n-1;m>=0;m--) ...{ printf("%d",arrTemp[m]); } //累加每次计算的中间乘法结果 carry = 0;//进位数初始化0 for (int r=0;r<lenX+1;r++) ...{ temp = iArrSum[j+r] + arrTemp[r]+carry; iArrSum[j+r] = temp%10; if (temp>=10)//原先计算结果不对是因为写成temp>10 ...{ carry = temp/10; } else ...{ carry = 0;//注意清零 } } printf(" "); } //打印计算结果 printf("------------------------------- "); for (int i=(lenX+lenY);i>=0;i--) ...{ if(iArrSum[i]!=0) ...{ flag =1; } if ( flag == 1) ...{ printf("%d",iArrSum[i]); } } printf(" "); } int _tmain( int argc, _TCHAR * argv[]) ... { char cArrX[MAX]; char cArrY[MAX]; printf("请输入正整型数X:"); scanf("%s",cArrX); printf(" "); printf("请输入正整型数Y:"); scanf("%s",cArrY); printf(" "); Calculate(cArrX,cArrY); return 0; }