百炼2980:大整数乘法
2013-06-17 14:43
239 查看
注意计算相乘时的方法
可以等到所有的都处理完后统一处理进位问题,这是看讲解后学到的方法,我自己做的是每次计算一次进行一次进位处理。这样就比较麻烦,而讲解中的统一处理算是对本道题的优化吧。
代码如下:
运行结果:
可以等到所有的都处理完后统一处理进位问题,这是看讲解后学到的方法,我自己做的是每次计算一次进行一次进位处理。这样就比较麻烦,而讲解中的统一处理算是对本道题的优化吧。
代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MaxSize 200 int main() { int an1[MaxSize+10]; int an2[MaxSize+10]; int bn[MaxSize+MaxSize];//存放处理结果 char str1[MaxSize+10]; char str2[MaxSize+10]; int i,j; //输入数据 scanf("%s %s",str1,str2); //初始化int数组 memset(an1,0,sizeof(an1)); memset(an2,0,sizeof(an2)); memset(bn,0,sizeof(bn)); //将输入的字符数组值转入int数组 int len1=strlen(str1); for(i=len1-1,j=0;i>=0;i--) { an1[j]=str1[i]-'0'; j++; } int len2=strlen(str2); for(i=len2-1,j=0;i>=0;i--) { an2[j]=str2[i]-'0'; j++; } /* for(i=0;i<len1;i++) { printf("%d %d\n",an1[i],an2[i]); }*/ //计算将结果存储到bn数组中 int t; int temp=0; for(j=0;j<len2;j++) { t=j; for(i=0;i<len1;i++) { temp=an1[i]*an2[j]; if(temp/10>0) { bn[t]+=temp%10; bn[t+1]+=temp/10; // printf("~~1%d,%d,\n",bn[t],bn[t+1]); }else { bn[t]+=temp; } int dd; dd=bn[t]; if(dd/10>0) { bn[t]=dd%10; bn[t+1]+=dd/10; } // printf("~~2%d,%d,\n",bn[t],bn[t+1]); t++; } } //显示出来,包括特殊情况的处理,跳过之前为0的数据 int startoutput=0; for(i=MaxSize*2-1;i>=0;i--) { if(startoutput) printf("%d",bn[i]); else if(bn[i]!=0) { printf("%d",bn[i]); startoutput=1; } } if(startoutput==0) printf("0"); return 0; }
运行结果:
相关文章推荐
- 百炼 2980 大整数乘法
- 2980 大整数乘法
- 百练2980 大整数乘法
- OpenJ_Bailian 2980 || POJ 2389 大整数乘法
- Pku百练2980(大整数乘法)
- OpenJudge 2980 大整数乘法
- 百练 2980 大整数乘法
- POJ 百练 2980:大整数乘法
- POJ 2980 大整数乘法 解题报告
- 百练oj2980 大整数乘法
- 百练2980 大整数乘法
- 百练_2980大整数乘法(大数相乘)
- POJ2980大整数乘法
- 基于数论变换的大整数乘法的性能测试
- HDU - 1042 N! JAVA大整数乘法运算
- 大整数的乘法
- 【分治算法】大整数乘法
- 百炼 2737:大整数除法
- 线性表-大整数乘法(数据结构基础 第2周)
- 大整数乘法