给定一个非负整数N,您的任务是计算所有数字的总和N,并用英文输出总和的每个数字。
输入规范:
每个输入文件包含一个测试用例。每个案例占用一行,其中包含N (≤10100).
输出规格:
对于每个测试用例,在一行中输出英文单词的总和数字。两个连续单词之间必须有一个空格,但行尾不能有多余的空格。
示例输入:
12345
示例输出:
one five
对于这道题来说,我觉得其实是道简单题,但是一开始想了很久都没思路,稍微被点了一下就发现很简单,就是字符与数字之间的转化,最后的转化的前提就是最开始要定义一个数组用于储存各个数字的英文。
#include<bits/stdc++.h>
using namespace std;
string s[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main()
{
int sum=0;
char c;
while(isdigit(c=getchar()))
{
sum+=c-'0';
}
string temp=to_string(sum);
for(int i=0;i<temp.size();i++)
{
if(i>0){cout<<' ';}
cout<<s[temp[i]-'0'];
}
}
这道题还学到了一个c++用于判断字符是不是数字的函数,isdigit,还有就是to_string表示的是将数字转化为字符串来使用,用于这种题来说就很简单了。还有一个要注意的点就是字符数字转化为数字直接减个'0'即可。
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
输入:s = "()"
输出:true
输入:s = "()[]{}"
输出:true
输入:s = "(]"
输出:false
还做了一道关于栈的题,要不是他是归类在栈的一类问题下面呢,我可能死都不知道用栈。用栈来想的话就很好理解,但是中途还是有几种特殊情况自己写的时候没想清楚,看完讲解视频才清楚了一些
class Solution {
public:
bool isValid(string s) {
stack<char>st;
int n=s.size();
if(n%2!=0)
{return false;}
for(int i=0;i<s.size();i++)
{
if(s[i]=='('){st.push(')');}
else if(s[i]=='{'){st.push('}');}
else if(s[i]=='['){st.push(']');}
else if (!st.empty() && s[i]== st.top()) {st.pop();}
else if(st.empty()||st.top()!=s[i]){return false;}
}
return st.empty();
}
};
关键就在最后两个else if后面的内容考虑到不同情况,话说c++用栈是比c简便的不止一点。
今天还浅复习了一下数据结构队列和串的知识,对于串的那个算法之前看了理解了,但是今天看的时候又忘了,理解的还不是够深刻啊,还是得做题来提升记忆。