关闭

整数相除

标签: 整数相除 四舍五入
402人阅读 评论(0) 收藏 举报

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

  •  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”。

我的答案只能是五位及以下的整数相除,否则会有bug,谁知道改进的话,求指导

#include <iostream>

#include <stdlib.h>
#include <string>
using namespace std;


int IntegerDivision (unsigned int dividend,  unsigned int divisor,char *pResult)
{
/*在这里完成代码*/
if (dividend)
{
int zen;
int chu = dividend * 100000;
    zen = chu/divisor;
    int fMod;
fMod = (chu%divisor*10) / divisor;
if (fMod > 5) 
{
zen++;
}
int m = 0;
while (zen % 10 == 0 && m < 5)
{
zen = zen / 10;
m = m + 1;
}
char num[18];
itoa(zen, num, 10);
int d = strlen(num);
    if (m == 5)
    {
if (d > 10)
{
return -1;
}
else
{
num[d] = '\0';
pResult = num;
for (int k = 0; k <= d; k++)
{
cout << pResult[k];
  }
return 0;
}
    }
else
{
if (d - (5 - m) > 10)
{
return -1;
}
else
{
char  num1[18];
for (int g = 0; g < d; g++)
{
num1[g] = num[g];
}

num1[d - (5 - m)] = '.';

for (int f = d - (5 - m); f < d; f++)
{
for (int h = f + 1; h < d+1; h++)
{
num1[h] = num[f];
}

}
num1[d+1] = '\0';
pResult = num1;
// for (int t = 0; t <= d+1; t++)
// {
// cout << pResult[t];
// }
return 0;
}
}
}
else
return -1;
}




int main()
{
char Result[100] = "0";
    IntegerDivision(12000, 2, Result);
return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2198次
    • 积分:57
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档