首页 > 其他 > 详细

大数相乘

时间:2014-04-11 09:15:45      阅读:418      评论:0      收藏:0      [点我收藏+]

#include <iostream>

#include <cstring>

 

using namespace std;

 

#define null 0

#define MAXN 51

 

//大数相乘

char *big_cheng(char line1[], char line2[])

{

short s1[MAXN], s2[MAXN], s[MAXN];//s1,s2:两个乘数;s:乘积的结果

int i, j, k, c;

int len1, len2, len;

len1 = strlen(line1);

len2 = strlen(line2);

len = len1 + len2;//初步确定乘积的长度

for(i = len1 - 1; i >= 0; i--)

{

s1[i] = line1[len1 - i -1] - ‘0‘;//将字符串转化为整型,并反着存放

}

for(i = len2 - 1; i >= 0; i--)

{

s2[i] = line2[len2 - i - 1] - ‘0‘;

}

 

memset(s, 0, sizeof(short) * (MAXN - 1));//s数组初始化

 

for(i = 0; i <= len1 -1; i++)

for(j = 0; j <= len2 -1; j++)

s[i + j] = s[i + j] + s1[i] * s2[j];//逐位相乘

 

for(i = 0, c = 0; i <= len - 1;i++)//处理进位

{

k = s[i] + c;

s[i] = k % 10;

c = k / 10;

}

 

for(i = len - 1; i >= 0; i--)

if(s[i] != 0)break;//处理多余的零

len = i + 1;

char *line;//注意只有指针才可以返回去,不能定义成数组

line = new char[len + 1];

if(len == 0)

{

line[0] = 0 + ‘0‘;

line[1] = ‘\0‘;//字符串的结束标志

}

else

{

for(i = 0; i <= len - 1; i++)

line[i] = s[len - i - 1] + ‘0‘;

line[len] = ‘\0‘;//字符串的结束标志

}

return line;

}

 

int main()

{

char line1[MAXN], line2[MAXN];

while(cin >> line1 >>line2)

{

cout << big_cheng(line1, line2) << endl;

}

return 0;

}

 

大数相乘,布布扣,bubuko.com

大数相乘

原文:http://www.cnblogs.com/lzh-Linux/p/3657641.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!