加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

华为入职前测试:大数相乘

发布时间:2020-12-14 03:40:50 所属栏目:大数据 来源:网络整理
导读:这个题很坑,有几种情况要测试 1.如果有一个乘数为空,则返回-1 2,如果结果为0,返回的字符串不能为空,要为“0”; #include "oj.h"/***************************************************************************** Prototype : multiply Description :

这个题很坑,有几种情况要测试

1.如果有一个乘数为空,则返回-1

2,如果结果为0,返回的字符串不能为空,要为“0”;

#include "oj.h"


/*****************************************************************************
 Prototype    : multiply
 Description  : 两个任意长度的长整数相乘,输出结果
 Input Param  : 
                const std::string strMultiplierA  乘数A
                const std::string strMultiplierB  乘数B
 Output       : 
                std::string strRst            乘法结果
 Return Value : 
                int                       0  正确  
                                         -1  异常
*****************************************************************************/
int multiply (const std::string strMultiplierA,const std::string strMultiplierB,std::string &strRst) 
{

	/* 在这里实现功能 */
	string chengshua = strMultiplierA;
	string chengshub = strMultiplierB;
	int a = chengshua.length();
	int b = chengshub.length();
	int strRst_length = 0;
	int c = (a+1)*(b+1);
	int *p = new int[c];
	int *pa = new int[a];
	int *pb = new int[b];
	if ((a == 0) || (b == 0))//测试是否有乘数为空
	{
		return -1;
	}
	for (int i = 0; i != c; i++)
	{
		p[i] = 0;
	}
	for (string::size_type index = 0; index !=  chengshua.length(); index++) //把乘数放到数组中
	{
		pa[a-1-index] = chengshua.at(index) - '0';
	}
	for (string::size_type index = 0; index != chengshub.length(); index++)
	{
		pb[b-1-index] = chengshub.at(index) - '0';
	}
	for (int temp_b = 0; temp_b != b; temp_b++)   //每个位循环相乘
	{
		for (int temp_a = 0; temp_a != a; temp_a++)
		{
			p[temp_a+temp_b] += pa[temp_a]*pb[temp_b]; 
			for (int x = temp_a + temp_b; x != c ; x++)
			{
				if (p[x]/10 == 0)
				{
					break;
				}
				else
				{
					p[x+1] = p[x+1] + p[x]/10;
					p[x] = p[x]%10;
				}
			}
		}
	}

	while (c-- > 0)  //判断结果有几位
	{
		if (p[c] != 0)
		{
			strRst_length = c + 1;
			break;
		}
	}
	char ch;
	for (int i = strRst_length - 1; i >= 0 ; i--)  //把结果放入字符串中
	{
		ch = p[i] + '0';
		strRst.push_back(ch);
	}
	if (strRst.empty())//如果结果为0,则输出字符串为“0”
	{
		strRst = "0";
	}

	return 0;
}
测试正确

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读