计算12345678901×98765432101的积

来源:互联网 发布:淘宝不按地址发货 编辑:程序博客网 时间:2024/05/17 22:40

前不久参加达内的“发现杯”碰到这么个题目,计算12345678901×98765432101的积

赛场没有理清思路,赛后恍悟……
大数相乘算法,从积的位数出发来思考
比如:积的个位=数1的个位×数2的个位;
 积的十位=数1的个位×数2的十位+数1的十位×数2的个位;
 积的百位=数1的个位×数2的百位+数1的十位×数2的十位+数1的百位×数2的个位;
 ...........
最后当然还要给积的每一位进行求余运算,做进位工作

#include "stdafx.h"#include <stdio.h>int main(int argc, char* argv[]){int one[11],two[11];one[0]=two[0]=1;one[1]=two[1]=0;int x,z;for(x=2;x<11;x++){one[x]=11-x;two[x]=x-1;}int three[22]={0,};for (z=0;z<22;z++){for (x=0;x<11&&x<=z;x++){if (z-x<11){three[z]+=one[x]*two[z-x];}}}for (z=0;z<22;z++){if (three[z]>=10){three[z+1]+=three[z]/10;three[z]=three[z]%10;}}if (three[21]!=0){for (z=21;z>=0;z--){printf("%d",three[z]);}}elsefor (z=20;z>=0;z--){printf("%d",three[z]);}return 0;}

将运行的结果和计算器得出的结果做下比价,即检验程序。