您的位置:首页 > 其它

大数相乘

2013-09-20 16:20 197 查看
题目:请使用代码计算1234567891011121314151617181920*2019181716151413121110987654321。

答:



#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
string strOne;
string strTwo;
cout<<"输入第一个乘数:";
cin>>strOne;
cout<<"输入第二个乘数:";
cin>>strTwo;
int lengthOne = strOne.size();
int lengthTwo = strTwo.size();
int lengthResult = lengthOne * lengthTwo;
int *result = new int[lengthResult];
memset(result, 0, lengthResult * sizeof(int));

int count = 1;
int i, j, k;
for (i = lengthTwo - 1; i >= 0; i--)
{
k = lengthResult - count;
for (j = lengthOne - 1; j >= 0; j--)
{
result[k--] += (strTwo[i] - '0') * (strOne[j] - '0'); //各列累加
}
count++;
}

for (i = lengthResult - 1; i > 0; i--)
{
while(result[i] >= 10)
{
result[i] -= 10;   //大于10,产生进位
result[i - 1]++;
}
}
for (i = 0; i < lengthResult; i++) //找到数组中第一个不为0的数,开始输出
{
if (0 != result[i])
{
break;
}
}

cout<<strOne<<" * "<<strTwo<<" = "<<endl;
for (; i < lengthResult; i++)
{
cout<<result[i];
}

delete [] result;
cout<<endl;
return 0;
}





运行界面如下:



分类: 算法面试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: