请选择 进入手机版 | 继续访问电脑版

计算化学公社

 找回密码
 现在注册!
查看: 359|回复: 11

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

[复制链接]

467

帖子

2

威望

2805

eV
积分
3312

Level 5 (御坂)

发表于 2019-9-21 09:57:58 | 显示全部楼层 |阅读模式
把数字转换成英语。
如果太难,先从一位数写起,逐渐增加。
你的程序最多支持多少位?
这个问题应该怎么写呢?

67

帖子

0

威望

1492

eV
积分
1559

Level 5 (御坂)

发表于 2019-9-21 10:34:11 | 显示全部楼层
我觉得你这些题咋看着这么像 leetcode 呢
https://leetcode.com/problems/integer-to-english-words/
其实 discuss 里有参考答案的

467

帖子

2

威望

2805

eV
积分
3312

Level 5 (御坂)

 楼主| 发表于 2019-9-21 10:47:18 | 显示全部楼层
highlight 发表于 2019-9-21 10:34
我觉得你这些题咋看着这么像 leetcode 呢
https://leetcode.com/problems/integer-to-english-words/
其 ...

leetcode到底是个什么网站?

67

帖子

0

威望

1492

eV
积分
1559

Level 5 (御坂)

发表于 2019-9-21 11:04:21 | 显示全部楼层
zyj19831206 发表于 2019-9-21 10:47
leetcode到底是个什么网站?

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

56

帖子

0

威望

160

eV
积分
216

Level 3 能力者

发表于 2019-9-21 14:44:46 | 显示全部楼层
从末尾向前3个3个一拆分,每三个数用一个function转化为几百几十几,三个三个之间再加上thousand, million ,billion

评分

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

查看全部评分

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

CCMBI of SJTU

467

帖子

2

威望

2805

eV
积分
3312

Level 5 (御坂)

 楼主| 发表于 2019-9-21 16:59:19 | 显示全部楼层
本帖最后由 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;
        }
};

56

帖子

0

威望

160

eV
积分
216

Level 3 能力者

发表于 2019-9-21 22:19:31 | 显示全部楼层
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

1658

帖子

3

威望

6101

eV
积分
7819

Level 6 (一方通行)

Ab Initio Amateur

发表于 2019-9-22 20:48:57 | 显示全部楼层
本帖最后由 卡开发发 于 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, 下载次数: 7)
满招损,谦受益。热衷于理论和方法研究水平不高但欢迎讨论。

467

帖子

2

威望

2805

eV
积分
3312

Level 5 (御坂)

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

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

1658

帖子

3

威望

6101

eV
积分
7819

Level 6 (一方通行)

Ab Initio Amateur

发表于 2019-9-23 16:11:45 | 显示全部楼层
本帖最后由 卡开发发 于 2019-9-23 16:13 编辑
zyj19831206 发表于 2019-9-23 15:51
发大神,你的各种语言都手到擒来,到底是怎么学的啊?你的cpp程序用vs编译,貌似还是错误一堆,是需 ...

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

这个问题我想是not和and这些在你的vs上不支持,试试看:
"not" => "!"
"and" => "&&"
"or"   => "||"那个提示数字过长部分后面最好直接return,这个问题是当时传完了才发现的。
满招损,谦受益。热衷于理论和方法研究水平不高但欢迎讨论。

467

帖子

2

威望

2805

eV
积分
3312

Level 5 (御坂)

 楼主| 发表于 2019-9-23 16:13:23 | 显示全部楼层
卡开发发 发表于 2019-9-23 16:11
只是都学过,都比较皮毛,所以你仔细看,不管用哪个我用的方法其实没啥差别。我猜C++掌握的好的人写出来 ...

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

1658

帖子

3

威望

6101

eV
积分
7819

Level 6 (一方通行)

Ab Initio Amateur

发表于 2019-9-23 16:15:36 | 显示全部楼层
zyj19831206 发表于 2019-9-23 16:13
皮毛,谦虚了,是不是有时候编译起来,C++14和C++17也有差距?

细节我没看,应该有差别,这个可以查到。用and和or、not这些是写python用多了一时半会没想起来要改一下导致的,python确实还是方便,有时候先用python打个草稿再改成C++或者Fortran,经常串台
满招损,谦受益。热衷于理论和方法研究水平不高但欢迎讨论。
您需要登录后才可以回帖 登录 | 现在注册!

本版积分规则

手机版|北京科音自然科学研究中心|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949-1号 )

GMT+8, 2019-10-18 22:41 , Processed in 0.198472 second(s), 27 queries .

快速回复 返回顶部 返回列表