计算化学公社

 找回密码 Forget password
 注册 Register
Views: 3957|回复 Reply: 11
打印 Print 上一主题 Last thread 下一主题 Next thread

[C/C++] 问一道C++编程题怎么写

[复制链接 Copy URL]

609

帖子

2

威望

4351

eV
积分
5000

Level 6 (一方通行)

把数字转换成英语。
如果太难,先从一位数写起,逐渐增加。
你的程序最多支持多少位?
这个问题应该怎么写呢?

185

帖子

1

威望

4139

eV
积分
4344

Level 6 (一方通行)

2#
发表于 Post on 2019-9-21 10:34:11 | 只看该作者 Only view this author
我觉得你这些题咋看着这么像 leetcode 呢
https://leetcode.com/problems/integer-to-english-words/
其实 discuss 里有参考答案的

609

帖子

2

威望

4351

eV
积分
5000

Level 6 (一方通行)

3#
 楼主 Author| 发表于 Post on 2019-9-21 10:47:18 | 只看该作者 Only view this author
highlight 发表于 2019-9-21 10:34
我觉得你这些题咋看着这么像 leetcode 呢
https://leetcode.com/problems/integer-to-english-words/
其 ...

leetcode到底是个什么网站?

185

帖子

1

威望

4139

eV
积分
4344

Level 6 (一方通行)

4#
发表于 Post on 2019-9-21 11:04:21 | 只看该作者 Only view this author
zyj19831206 发表于 2019-9-21 10:47
leetcode到底是个什么网站?

程序员用来刷面试题的,我用来抄代码的

138

帖子

0

威望

443

eV
积分
581

Level 4 (黑子)

5#
发表于 Post on 2019-9-21 14:44:46 | 只看该作者 Only view this author
从末尾向前3个3个一拆分,每三个数用一个function转化为几百几十几,三个三个之间再加上thousand, million ,billion

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
我本是个娃娃 + 1 我也是这么想的(滑稽)

查看全部评分 View all ratings

上海交通大学计算化学与分子生物信息学实验室
Shanghai JiaoTong University
Computational Chemistry and Molecular Bioinformatics Laboratory

CCMBI of SJTU
点击访问个人主页

609

帖子

2

威望

4351

eV
积分
5000

Level 6 (一方通行)

6#
 楼主 Author| 发表于 Post on 2019-9-21 16:59:19 | 只看该作者 Only view this author
本帖最后由 zyj19831206 于 2019-9-21 17:00 编辑
DoubeeTwT 发表于 2019-9-21 14:44
从末尾向前3个3个一拆分,每三个数用一个function转化为几百几十几,三个三个之间再加上thousand, million  ...

兄弟,你说的还是有点含糊,能否写一个伪代码,我在leetcode搜索了一段本题代码,总是运行不过去:
class Solution {
public:
        string numberToWords(int num, bool prependSpace = false) {
                static const string unit[] = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
                static const string ten[] = { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };

                string ret = "";
                if (prependSpace && num != 0) {
                        ret += " ";
                }

                if (num == 0 && !prependSpace) {
                        ret += "Zero";
                }
                else if (num < 20) {
                        ret += unit[num];
                }
                else if (num < 100) {
                        ret += ten[num / 10] + numberToWords(num % 10, true);
                }
                else if (num < 1000) {
                        ret += numberToWords(num / 100) + " Hundred" + numberToWords(num % 100, true);
                }
                else if (num < 1000000) {
                        ret += numberToWords(num / 1000) + " Thousand" + numberToWords(num % 1000, true);
                }
                else if (num < 1000000000) {
                        ret += numberToWords(num / 1000000) + " Million" + numberToWords(num % 1000000, true);
                }
                else {
                        ret += numberToWords(num / 1000000000) + " Billion" + numberToWords(num % 1000000000, true);
                }

                return ret;
        }
};

138

帖子

0

威望

443

eV
积分
581

Level 4 (黑子)

7#
发表于 Post on 2019-9-21 22:19:31 | 只看该作者 Only view this author
zyj19831206 发表于 2019-9-21 16:59
兄弟,你说的还是有点含糊,能否写一个伪代码,我在leetcode搜索了一段本题代码,总是运行不过去:
clas ...

差不多就是你这个代码的意思啊
保存一个数组零到十九,判断是否小于20:
小于20,unit[num]直接就是英语了
大于20,ten[num的十位数]+unit[num的个位数]
百位一样操作组合起来
然后每3位加上thousand,million, billion

我觉得这个代码已经把意思写的很清楚了,好好读读代码把
debug的话不如说说哪里没有跑通?
上海交通大学计算化学与分子生物信息学实验室
Shanghai JiaoTong University
Computational Chemistry and Molecular Bioinformatics Laboratory

CCMBI of SJTU
点击访问个人主页

3622

帖子

3

威望

1万

eV
积分
18442

Level 6 (一方通行)

第一原理惨品小作坊

8#
发表于 Post on 2019-9-22 20:48:57 | 只看该作者 Only view this author
本帖最后由 卡开发发 于 2019-9-22 21:05 编辑
zyj19831206 发表于 2019-9-21 16:59
兄弟,你说的还是有点含糊,能否写一个伪代码,我在leetcode搜索了一段本题代码,总是运行不过去:
clas ...

其实也没多复杂,注释懒得写了,有啥欠考虑的导致bug我也不知道了,自行修改。
1、就把数组三位一拆,挨个加thousand, million, billion。
2、三位当中再划分一次,100那个位置单独一个数,后面可能是一位也可能是两位。原则上这里看情况应该补个and,他们找的代码都没提到这事情。
3、按照上面例子来说,存了0~20和整10位的,这个也不是唯一做法。
4、写程序还是多写多想多看,除了学习别人好的风格,自己也得多思考。
num2en.cpp (2.14 KB, 下载次数 Times of downloads: 8)
num2en.py (1.71 KB, 下载次数 Times of downloads: 6)
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

609

帖子

2

威望

4351

eV
积分
5000

Level 6 (一方通行)

9#
 楼主 Author| 发表于 Post on 2019-9-23 15:51:18 | 只看该作者 Only view this author
本帖最后由 zyj19831206 于 2019-9-23 15:55 编辑
卡开发发 发表于 2019-9-22 20:48
其实也没多复杂,注释懒得写了,有啥欠考虑的导致bug我也不知道了,自行修改。
1、就把数组三位一拆,挨 ...

发大神,你的各种语言都手到擒来,到底是怎么学的啊?你的cpp程序用vs编译,貌似还是错误一堆,是需要加什么头文件吗?还是?

QQ图片20190923155454.png (63.93 KB, 下载次数 Times of downloads: 85)

QQ图片20190923155454.png

3622

帖子

3

威望

1万

eV
积分
18442

Level 6 (一方通行)

第一原理惨品小作坊

10#
发表于 Post on 2019-9-23 16:11:45 | 只看该作者 Only view this author
本帖最后由 卡开发发 于 2019-9-23 16:13 编辑
zyj19831206 发表于 2019-9-23 15:51
发大神,你的各种语言都手到擒来,到底是怎么学的啊?你的cpp程序用vs编译,貌似还是错误一堆,是需 ...

只是都学过,都比较皮毛,所以你仔细看,不管用哪个我用的方法其实没啥差别。我猜C++掌握的好的人写出来的代码肯定比我这边放的更流畅,建议精通一个比较好。

这个问题我想是not和and这些在你的vs上不支持,试试看:
"not" => "!"
"and" => "&&"
"or"   => "||"那个提示数字过长部分后面最好直接return,这个问题是当时传完了才发现的。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

609

帖子

2

威望

4351

eV
积分
5000

Level 6 (一方通行)

11#
 楼主 Author| 发表于 Post on 2019-9-23 16:13:23 | 只看该作者 Only view this author
卡开发发 发表于 2019-9-23 16:11
只是都学过,都比较皮毛,所以你仔细看,不管用哪个我用的方法其实没啥差别。我猜C++掌握的好的人写出来 ...

皮毛,谦虚了,是不是有时候编译起来,C++14和C++17也有差距?

3622

帖子

3

威望

1万

eV
积分
18442

Level 6 (一方通行)

第一原理惨品小作坊

12#
发表于 Post on 2019-9-23 16:15:36 | 只看该作者 Only view this author
zyj19831206 发表于 2019-9-23 16:13
皮毛,谦虚了,是不是有时候编译起来,C++14和C++17也有差距?

细节我没看,应该有差别,这个可以查到。用and和or、not这些是写python用多了一时半会没想起来要改一下导致的,python确实还是方便,有时候先用python打个草稿再改成C++或者Fortran,经常串台
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-27 18:05 , Processed in 0.181043 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list