计算化学公社

标题: 问一道C++编程题怎么写 [打印本页]

作者
Author:
zyj19831206    时间: 2019-9-21 09:57
标题: 问一道C++编程题怎么写
把数字转换成英语。
结果以此为准:https://www.tools4noobs.com/online_tools/number_spell_words/
如果太难,先从一位数写起,逐渐增加。
你的程序最多支持多少位?
这个问题应该怎么写呢?


作者
Author:
highlight    时间: 2019-9-21 10:34
我觉得你这些题咋看着这么像 leetcode 呢
https://leetcode.com/problems/integer-to-english-words/
其实 discuss 里有参考答案的
作者
Author:
zyj19831206    时间: 2019-9-21 10:47
highlight 发表于 2019-9-21 10:34
我觉得你这些题咋看着这么像 leetcode 呢
https://leetcode.com/problems/integer-to-english-words/
其 ...

leetcode到底是个什么网站?
作者
Author:
highlight    时间: 2019-9-21 11:04
zyj19831206 发表于 2019-9-21 10:47
leetcode到底是个什么网站?

程序员用来刷面试题的,我用来抄代码的
作者
Author:
DoubeeTwT    时间: 2019-9-21 14:44
从末尾向前3个3个一拆分,每三个数用一个function转化为几百几十几,三个三个之间再加上thousand, million ,billion
作者
Author:
zyj19831206    时间: 2019-9-21 16:59
本帖最后由 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;
        }
};

作者
Author:
DoubeeTwT    时间: 2019-9-21 22:19
zyj19831206 发表于 2019-9-21 16:59
兄弟,你说的还是有点含糊,能否写一个伪代码,我在leetcode搜索了一段本题代码,总是运行不过去:
clas ...

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

我觉得这个代码已经把意思写的很清楚了,好好读读代码把
debug的话不如说说哪里没有跑通?
作者
Author:
卡开发发    时间: 2019-9-22 20:48
本帖最后由 卡开发发 于 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、写程序还是多写多想多看,除了学习别人好的风格,自己也得多思考。
(, 下载次数 Times of downloads: 8)
(, 下载次数 Times of downloads: 6)

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

发大神,你的各种语言都手到擒来,到底是怎么学的啊?你的cpp程序用vs编译,貌似还是错误一堆,是需要加什么头文件吗?还是?
作者
Author:
卡开发发    时间: 2019-9-23 16:11
本帖最后由 卡开发发 于 2019-9-23 16:13 编辑
zyj19831206 发表于 2019-9-23 15:51
发大神,你的各种语言都手到擒来,到底是怎么学的啊?你的cpp程序用vs编译,貌似还是错误一堆,是需 ...

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

这个问题我想是not和and这些在你的vs上不支持,试试看:
"not" => "!"
"and" => "&&"
"or"   => "||"那个提示数字过长部分后面最好直接return,这个问题是当时传完了才发现的。

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

皮毛,谦虚了,是不是有时候编译起来,C++14和C++17也有差距?
作者
Author:
卡开发发    时间: 2019-9-23 16:15
zyj19831206 发表于 2019-9-23 16:13
皮毛,谦虚了,是不是有时候编译起来,C++14和C++17也有差距?

细节我没看,应该有差别,这个可以查到。用and和or、not这些是写python用多了一时半会没想起来要改一下导致的,python确实还是方便,有时候先用python打个草稿再改成C++或者Fortran,经常串台




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3