华为上机题汇总(二十)
注:编译环境为Visual Studio 2012,答案仅供参考。
目录
第九十六题
96 . 给分数的循环节加括号
两个整数相除,将结果用字符串返回。如果是循环小数,将循环的位用括号括起来。
输入:1 3
输出:0.(3)
输入 1 7
输出 0.(142857)
#include <iostream>
#include <string>
using namespace std;
void div(int a, int b, string &result){
if (!b) return;
int c = a / b;
a %= b;
result = to_string(c);
if (!a) return;
result.push_back('.');
string tmp;
bool flag = 0;
while (a)
{
a *= 10;
c = a / b;
a %= b ;
int pos = tmp.find(c +'0');
if (pos >= 0)
{
flag = 0;
int tmp_a = a, tmp_b = b, tmp_c;
string s;
for (unsigned i = pos + 1; i < tmp.size(); i++)
{
tmp_a *= 10;
tmp_c = tmp_a / tmp_b;
tmp_a %= tmp_b;
s.push_back(tmp_c);
if (tmp[i] != tmp_c + '0')
{
flag = 1;
break;
}
}
if (!flag)
{
result += string