两个大整数相乘(某公司校园招聘机试试题)
2013-09-19 11:21
274 查看
#include <iostream> using namespace std; int multi(char a, char b) { return (a - '0') * (b - '0'); } void strMulti(char *a, char *b, char *c) { // 最好对a,b和c的合法性进行判断 int lenA = strlen(a); int lenB = strlen(b); int maxLen = lenA + lenB; int *p = new int[maxLen]; memset(p, 0, maxLen * sizeof(int)); // 千万要注意不要写成memset(p, 0, maxLen); int i, j; for(j = lenB - 1; j >= 0; j--) { for(i = lenA - 1; i >= 0; i--) { p[j + i + 1] += multi(b[j], a[i]); } } // 处理进位操作 for(i = maxLen - 1; i >= 1; i--) { p[i - 1] += p[i] / 10; p[i] = p[i] % 10; } int *s = p; // m位正整数和n位正整数相乘,结果的位数必然是(m+n-1)位或者(m+n)位 if(0 == p[0]) { p++; } int *pTmp = NULL; for(pTmp = p; pTmp < s + maxLen; pTmp++) { *c++ = *pTmp + '0'; } *c = '\0'; delete s; } int main() { char a[101] = "123456789"; char b[101] = "987654321"; char c[201] = ""; strMulti(a, b, c); cout << c << endl; // 121932631112635269 return 0; }
相关文章推荐
- 整数数组中大于或等于平均数的元素个数(某公司校园招聘机试试题)
- 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题
- 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题
- 求正整数数组构成的最小数(某公司2013年校园招聘笔试试题)
- 如何判断两个矩形是否有重叠部分?(某公司校园招聘笔试试题)
- 如何判断两个矩形是否有重叠部分?(某公司校园招聘笔试试题)
- 回文串的判断(某公司校园招聘机试试题)
- delete p 究竟把p怎么了?(某公司校园招聘笔试试题)
- 单链表的就地逆置 (单链表带头结点)(某公司校园招聘面试试题)
- 为什么空类的大小不为0? (某公司校园招聘招聘面试试题)---我当时只知道其然, 但不知道所以然!
- 如何判断平面上两条线段(注意是线段)是否相交?(某公司校园招聘面试试题)
- [阿里巴巴2015校园招聘]写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。 .
- 华为2012校园招聘上机题——大数相乘,两个超过100位的大数相乘C语言
- 完全二叉树叶子节点数n0和总结点数N的关系 (某公司校园招聘笔试试题)
- 利用循环链表(单链)实现Josephus环(某公司校园招聘笔试试题)
- 求数组中n-1个元素的乘积的最大值(某公司2007年校园招聘笔试试题)
- A升杯子和B升的杯子如何倒出C升的水?(某公司校园招聘笔试试题,某另外公司校园招聘笔试试题)
- 部分华为校园招聘机试试题及答案(C语言版本)
- C语言一个文件中的函数能直接调用另外一个文件中的静态函数吗? (某公司校园招聘面试试题)
- 字符串的大小比较(某公司校园招聘面试试题)