您的位置:首页 > 其它

华为机试题: 整数相除

2016-02-16 11:16 246 查看
描述: 实现接口:

/***********************************************************************

Description : 整数相除。

Input : unsigned int dividend :被除数,取值为无符号整数。

unsigned int divisor: 除数,取值为无符号整数。

Output : Char *pResult : 运算结果。

Return Value : 0:成功; -1:失败;

***********************************************************************/

int IntegerDivision (unsigned int dividend,

unsigned int divisor,

Char *pResult);

说明:

Char *pResult的空间由调用者提供,结果中最多保存十位整数,五位小数,整数部分超出十位,返回失败;小数部分超出五位,四舍五入;

存储结果以字符串形式显示,整数和小数部分需加上小数点。如结果为2.05,则输出的结果为”2.05”。




#include <stdlib.h>
#include <string.h>
#include <string>
#include <stdio.h>
#include "oj.h"

using namespace std;
/***********************************************************************
 Description  : 整数相除。
 Input        : unsigned int dividend :被除数,取值为无符号整数。
                unsigned int divisor: 除数,取值为无符号整数。
 Output       : Char *pResult       : 运算结果。
 Return Value : 0:成功; -1:失败;
***********************************************************************/
int IntegerDivision (unsigned int dividend,  
                              unsigned int divisor,
                              char *pResult)
{
	/*在这里完成代码*/
	if (divisor == 0 || pResult == NULL)
	{
		return -1;
	}

	int yushu = dividend % divisor;

	/*当可以整除的时候*/
	if (yushu == 0)
	{
		unsigned int ret = dividend / divisor;
	
		/*判断结果是否超过10位*/
		if (ret > 999999999)
		{
			return -1;
		}

		sprintf_s(pResult,10, "%d", ret);

		return 0;
	}
	/*当不能整除的时候*/
	else
	{
		double ret = (double)dividend / (double)divisor;
		char retchar[50] = { 0 };

		sprintf_s(retchar, "%.5f", ret);

		/*找到小数点的位置*/
		string ss(retchar);
		int pos = ss.find_first_not_of('.');
		if (pos > 10)
		{
			return -1;
		}

		/*去掉小数点后面的0*/
		int len = ss.size() - 1;
		bool iszero = true;
		while (iszero)
		{
			if (retchar[len] == '0')
			{
				len--;
			}
			else
			{
				iszero = false;
			}
		}

		int index = 0;
		/*判断小数点是不是最后一个*/
		len = (retchar[len] == '.') ? (len - 1) : len;
		for (; index <= len; index++)
		{
			pResult[index] = retchar[index];
		}
		pResult[len + 1] = '\0';
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: