小马一面凉经

10.17一面,已挂

手撕没撕出来

题目

实现一个除法器,以字符串形式输出除法结果,如果有循环则用括号括住循环部分。

Solution

写的时候没有把整数部分和小数部分分开来算,导致逻辑非常冗余,实际上计算小数部分时被除数一定小于除数,而整数部分可以直接通过除法来实现,因此这样分开更简单。

#include <iostream>
#include <string>
#include <unordered_map>

std::string divide(int numerator, int denominator) {
    if (numerator == 0) return "0";
    if (denominator == 0) return "Division by zero is undefined";

    std::string result;
    // Determine the sign of the result
    if ((numerator < 0) ^ (denominator < 0)) result += "-";

    long long num = std::abs(static_cast<long long>(numerator));
    long long den = std::abs(static_cast<long long>(denominator));

    // Append the integral part of the division
    result += std::to_string(num / den);
    num %= den;
    if (num == 0) return result;

    // Prepare for fractional part
    result += ".";
    std::unordered_map<long long, int> seenRemainders;
    std::string fraction;

    // Long division algorithm
    while (num != 0) {
        if (seenRemainders.find(num) != seenRemainders.end()) {
            // Loop detected
            fraction.insert(seenRemainders[num], "(");
            fraction += ")";
            break;
        }
        seenRemainders[num] = fraction.size();
        num *= 10;
        fraction += std::to_string(num / den);
        num %= den;
    }
    result += fraction;
    return result;
}

int main() {
    std::cout << divide(1, 2) << std::endl;  // 0.5
    std::cout << divide(2, 1) << std::endl;  // 2
    std::cout << divide(2, 3) << std::endl;  // 0.(6)
    std::cout << divide(22, 7) << std::endl; // 3.(142857)
    std::cout << divide(-50, 8) << std::endl; // -6.25
    return 0;
}

全部评论
力扣原题
点赞
送花
回复
分享
发布于 2023-10-26 21:19 广东

相关推荐

#牛客帮帮团来啦!有问必答#个人条件:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有多年在校电子实验室学习经历,软硬件动手能力还算可以,电赛拿过省一,英语四六级没过,绩点一般般;身材瘦高,家在河南二线旅游城市市区,婚房已备好,没女朋友没房贷。&nbsp;&nbsp;面的岗位都是嵌入式工程师,基本都是13薪。已到手的offer:①杭可科技:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;杭州萧山区,新能源设备上市公司,研发有1k多人。实习期3个月,鑫不过W,公积金较少。吃住在园区内便宜方便,且稍微有点补贴。且杭州人才补贴挺多。②畅加风行:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;苏州相城区,是清华大学苏州汽车研究院孵化的企业,无人驾驶方向,研发几十人,有落地产品。实习期6个月,鑫微强于上,食宿不包。③武汉天运,汽车电子方向,嵌入式硬件。位置稍偏因为是新建好的厂区,鑫⑦点⑤,有经验后年终稍多,包吃宿。④安信可:做通信模块的,研发(实习)在深圳,生产(我的岗位)在洛阳,岗位嵌入式助理工程师。转正调薪,鑫⑤点⑤起步。在做人生抉择的时候,才注意到没有一开始笃定自己的人生规划。有点患得患失,遗憾大学尝试的事情太少了。按理来说考公考编挺适合我的家庭条件。但现在又不甘心放掉这点技术能力,转去从零开始备考。所以现在有个想法:在外学习技术提升能力,混出头或者遇到贵人,有能力在外面定居也可以,但异地购房和教育成本让人望而生怯。如果没有混出头,选择新能源行业还是汽车行业方便回家就业?虽然岗位都是嵌入式,但是行业对口的话,未来跳回来是不是容易一点?请各位前辈大佬赐教。(担心一些信息涉及企业隐私,所以有的数字说的比较隐晦) #晒一晒我的offer#&nbsp;安利/避雷我的岗位&nbsp;#如何确定求职岗位#
投递清华大学等公司7个岗位 牛客帮帮团来啦!有问必答 晒一晒我的offer
点赞 评论 收藏
转发
1 3 评论
分享
牛客网
牛客企业服务