百练oj2980 大整数乘法
2010-05-16 16:37
330 查看
//ID:百练oj2980 大整数乘法
//Name:Tanky_Woo
//网站:C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛
//地址:http://www.cppleyuan.com/
//个人主页:www.wutianqi.com
//豆瓣小组:http://www.douban.com/group/cppleyuan/
//QQ:17611904
//QQ群:C++奋斗乐园①群:19333724(满) ②群:23840480 ③群:17314377 ④群:23829384
//转载请写上本帖链接和“C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛”
//C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛:www.cppleyuan.com //我的个人主页:www.wutianqi.com //分析:为方便编程,不急于进位,而将进位问题留待最后统一处理。 //规律:一个数的第i位和另外一个一个数的第j位相乘所得的数,一定是要累加到结果的第 i+j 位上。 #include <iostream> #include <math.h> #include <stdlib.h> #include <string> #include <assert.h> #include <algorithm> using namespace std; #define MAX_NUM 210 unsigned an1[MAX_NUM]; unsigned an2[MAX_NUM]; unsigned result[MAX_NUM*2]; //现开始忘了*2 char szLine1[MAX_NUM]; char szLine2[MAX_NUM]; int main() { gets(szLine1); gets(szLine2); int i, j; memset(an1, 0, sizeof(an1)); memset(an2, 0, sizeof(an2)); memset(result, 0, sizeof(result)); //下面将szLine1中存储的字符串形式的整数倒序转换到an1中去。 int nLen1 = strlen(szLine1); j = 0; for(i = nLen1-1; i >= 0; i--) an1[j++] = szLine1[i] - '0'; int nLen2 = strlen(szLine2); j = 0; for(i = nLen2-1; i >= 0; i--) an2[j++] = szLine2[i] - '0'; for(i = 0; i < nLen2; i++) for(j = 0; j < nLen1; j++) { result[i+j] += an1[i] * an2[j]; //逐位相乘 } for(i = 0; i < MAX_NUM * 2; i++) if(result[i] >= 10) //看是否大于10,大于则进位 { result[i+1] += result[i] / 10; result[i] %= 10; } //输出结果,考虑 0 的特殊情况。 bool startOutput = false; for(i = MAX_NUM * 2-1; i >= 0; i--) //一定要减一. if(startOutput) printf("%d", result[i]); else if(result[i]) { printf("%d", result[i]); startOutput = true; } if(!startOutput) printf("0"); return 0; }
相关文章推荐
- Pku百练2980(大整数乘法)
- 百练 2980 大整数乘法
- N的阶乘 -- (九度OJ 大整数乘法)
- java实现大整数的加减乘除法(百练OJ:2736、2737、2980、2981)
- N的阶乘 -- (九度OJ 大整数乘法)
- POJ2980大整数乘法
- 百炼2980:大整数乘法
- OpenJ_Bailian 2980 || POJ 2389 大整数乘法
- POJ 百练 2980:大整数乘法
- POJ 2980 大整数乘法 解题报告
- 百练_2980大整数乘法(大数相乘)
- 百练2980 大整数乘法
- 百炼 2980 大整数乘法
- 百练2980 大整数乘法
- OpenJudge 2980 大整数乘法
- 2980 大整数乘法
- 华为OJ基础篇-输入n个整数,输出其中最小的k个
- HDU - 1042 N! JAVA大整数乘法运算
- 大整数乘法算法
- 分治法实现大整数乘法