华为机试题: 整数相除

描述: 
  • 实现接口

  • /***********************************************************************

  •  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); 

说明:

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

  2. 存储结果以字符串形式显示,整数和小数部分需加上小数点。如结果为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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmfrm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值