2020-06-03

分数化小数
习题2-5 分数化小数(decimal)输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤10⁶,c≤100。输入包含多组数据,结束标记为a=b=c=0。
样例输入:1 6 4
0 0 0
样例输出:Case 1: 0.1667
思路:看到网上有用printf(“%.*f”,(double)a/b)的,可惜double的精度只有16位。
首先利用循环,把每一位的商存在一个数组中然后判断进位情况(1.第c+1位<4 2.c+1位>4且c位!=9 3. c+1位>4且c位==9 这种情况还要再逆序循环判断前一位。最后,此时数组里存放的是已经处理好的整数位和小数位的数值,只需输出即可一道题折磨了我很久。
在这里插入图片描述昨天晚上开始做这个题,自己想了半个小时没想出来看别人的代码理解了半个小时,把基本算法掌握了。然后抄别人代码却跑不出正确结果,找了一个多小时才发现仅仅因为scanf里面多输了一个%,居然没报错!自以为自己弄会了这个题,可是自己能不能写出来又是一回事,中午又花了一个半小时,又是扣细节,把代码写在纸上,自认为没问题了。晚上写在电脑上一跑却发现有一种情况跑不出来,即0.9999情况,然后苦思冥想两个小时,最后灵机一动,发现还有调试这个功能,边百度边用,一个一个变量的观察,一步一步看着代码执行到哪,最后终于成功找出bug。最终耗时五个半小时,最后跑出来的那一刻我激动的说不出话。

1454. 活跃用户 表 Accounts: | Column Name | Type | |---------------|---------| | id | int | | name | varchar | id 是该表主键(具有唯一值的列) 该表包含账户 id 和账户的用户名. 表 Logins: | Column Name | Type | |---------------|---------| | id | int | | login_date | date | 该表可能包含重复项. 该表包含登录用户的账户 id 和登录日期. 用户也许一天内登录多次. 活跃用户 是指那些至少连续 5 天登录账户的用户。 编写解决方案, 找到 活跃用户 的 id 和 name。 返回的结果表按照 id 排序 。 结果表格式如下例所示。 示例 1: 输入: Accounts 表: | id | name | |----|----------| | 1 | Winston | | 7 | Jonathan | Logins 表: | id | login_date | |----|------------| | 7 | 2020-05-30 | | 1 | 2020-05-30 | | 7 | 2020-05-31 | | 7 | 2020-06-01 | | 7 | 2020-06-02 | | 7 | 2020-06-02 | | 7 | 2020-06-03 | | 1 | 2020-06-07 | | 7 | 2020-06-10 | 输出: | id | name | |----|----------| | 7 | Jonathan | 解释: id = 1 的用户 Winston 仅仅在不同的 2 天内登录了 2 次, 所以, Winston 不是活跃用户. id = 7 的用户 Jonathon 在不同的 6 天内登录了 7 次, , 6 天中有 5 天是连续的, 所以, Jonathan 是活跃用户. 进阶问题: 如果活跃用户是那些至少连续 n 天登录账户的用户, 你能否写出通用的解决方案?# 1454. 活跃用户 accounts = pd.DataFrame({'id': [1, 7], 'name': ['Winston', 'Jonathan']}).astype({"id": "int64", "name": "str"}) logins = pd.DataFrame({'id': [7, 1, 7, 7, 7, 7, 7, 1, 7], 'login_date': ['2020-05-30', '2020-05-30', '2020-05-31', '2020-06-01', '2020-06-02', '2020-06-02', '2020-06-03', '2020-06-07', '2020-06-10']}).astype({"id": "int64", "login_date": "datetime64[ns]"})
11-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值