这是个傻逼的题目是吧?但是这个事情一直很有需求,特别是C语言入门阶段。
解决方案有许多,我写了一个可以凑合的,不过问题也很严重的。
主要的问题是:内存泄漏。
原理谁都明白,就是模拟竖式计算,记着char的’1’和int的1之间差48就好了。
char* mul (char* a, char* b) { char* r; int la,lb,lr; int tr,ti,tb; int i,j; la = strlen(a); lb = strlen(b); lr = la+lb+1; r = (char*)calloc(lr,sizeof(char)); for (i = 0 ; i < lr;i++) r[i]='0'; r[lr-1]=' '; ti = 0; tb = 0; for (i = la -1; i>=0 ; i--) for (j = lb-1;j >=0 ; j--) { tr = (a[i]-48)*(b[j]-48) + ti + (r[lr-2-(la-1-i)-(lb-1-j)]-48); ti = tr / 10; tb = tr % 10; r[lr-2-(la-1-i)-(lb-1-j)] = tb+48; } if (ti!=0) r[0]=ti+48; while (r[0]=='0') r++; return r; }