java 输入数字 输出英文
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 输入数字 输出英文相关的知识,希望对你有一定的参考价值。
Write a Java application that reads whole numbers between 0 and 999 and writes the numbers as words. The program reports an out of range error if the number is greater than 999. The program stops when the user types -1.
import java.util.HashMap;import java.util.Map;
import java.util.Scanner;
public class Test3
public static void main(String args[])
// 输入一个数
// 判断是否是-1
Scanner sc = new Scanner(System.in);
Map<Integer, String> map = new HashMap<Integer, String>()
put(0, "zero");
put(1, "one");
put(2, "two");
put(3, "three");
put(4, "four");
put(5, "five");
put(6, "six");
put(7, "seven");
put(8, "eight");
put(9, "nine");
put(10, "ten");
put(11, "eleven");
put(12, "twelve");
put(13, "thirteen");
put(14, "fourteen");
put(15, "fifteen");
put(16, "sixteen");
put(17, "seventeen");
put(18, "eighteen");
put(19, "nineteen");
put(20, "twenty");
put(30, "thirty");
put(40, "fourty");
put(50, "fifty");
put(60, "sixty");
put(70, "seventy");
put(80, "eighty");
put(90, "ninety");
put(100, "hundred");
;
int num = 0;
String printStr = "";
while(true)
System.out.print("请输入一个数字(输入-1退出程序):");
num = sc.nextInt();
if(num == -1)
System.out.println("程序结束!");
break;
if(num >999)
System.out.println("超出范围!");
break;
//0~19的映射关系
if (num < 20)
printStr = map.get(num);
//20~100的映射关系
if (num >= 20 && num < 100)
printStr = getS(map, num);
//100~999的映射关系
if(num >=100 && num <= 999)
printStr = map.get(num/100)+" hundred" + " " + getS(map, num%100) ;
System.out.println(printStr);
private static String getS(Map<Integer, String> map, int num)
int g = num%10;
int s = num - g;
if(num < 20)
return map.get(num);
else
return map.get(s)+" "+ (g == 0 ? "" :map.get(g));
上一个写错了,不好意思
参考技术A //英文指的是英文单词吧,比如1输出one,2输出two,这貌似只能创建一个数字数组//我写了0到10的,0到999类似
import java.util.Scanner;
public class Convert
static final String WORDS_LIST[]=
"zero","one","two","three","four","five","six","seven","eight","nine","ten";
public static void main(String []args)
Scanner scanner = new Scanner(System.in);
int number;
while(scanner.hasNextInt())
number = scanner.nextInt();
if(number == -1)
System.out.println("exit");
scanner.close();
break;
if(number > WORDS_LIST.length)
System.out.println("Out of range error!");
continue;
String msg = String.format("The word of %1$s is:", number) + WORDS_LIST[number];
System.out.println(msg);
参考技术B 是要将阿拉伯数字转成英文的表达吧?
JAVA -ST
1.标题:字符串中找出连续最长的数字串|时间限制:1秒|内存限制:32768k读入一个字符串str,输出字符串str中连续最长的数字串
输入描述:个测试输入包含1个测试用例,一个字符串str,长度不超过255
输出描述:在一行内输出str中里连续最长的数字串
示例:
输入:abcd12345ed125ss123456789
输出:123456789
(https://www.nowcoder.com/questionTerminal/bd891093881d4ddf9e56e7cc8416562d?orderByHotValue=0&page=1&onlyReference=false)
#include<iostream> #include<string> using namespace std; string longestNumStr(string str){ string max = "",tmp = ""; for(int i = 0; i < str.size(); ++ i){ if(str[i] >= 48 && str[i] <= 57){ tmp += str[i]; } else{ max = max.size() < tmp.size() ? tmp : max; tmp = ""; } } max = max.size() < tmp.size() ? tmp : max; return max; } int main(){ string str; while(getline(cin,str)){ cout << longestNumStr(str) << endl; } return 0; }
2.标题:倒置字符串|时间限制:1秒|内存限制:32768k讲一句话的单词进行倒置,标点不倒置。比如i like bejing.经过函数后变为:beijing.like
i
输入描述:每个测试输入包含1个测试用例:i like beijing 输入用例长度不超过100
输出描述:依次输出倒置之后的字符串,以空格分割
示例:
输入:I like beijing.
输出:beijing.like I
()
#include<bits/stdc++.h> using namespace std; int main() { string a; while(getline(cin,a)) { reverse(a.begin(),a.end()); int i=0,j=i; while(i<a.size()) { //cout<<i<<endl; while(i<a.size()&&a[i]!=‘ ‘) ++i; // cout<<i<<endl; reverse(a.begin()+j,a.begin()+i); j=++i; } cout<<a<<endl; } return 0; }
3.标题:寻找第K大|时间限制:3秒|内存限制:32768k有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数给定一个整数数组A,同时
给定它的大小n和要找的K(K在1和n之间),请返回第K大的数,保证答案存在
样例:
[1,3,5,2,2],5,3
返回:2
(https://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf)
class Finder { public: int findKth(vector<int> a, int n, int K) { return quickfind(a, 0, n-1, K); } int quickfind(vector<int>& a, int left, int right, int k) { int i = left; int j = right; int mark = a[left]; while (i < j) { while (i < j && a[j] >= mark) --j; if (i < j) a[i++] = a[j]; while (i < j && a[i] <= mark) ++i; if (i < j) a[j--] = a[i]; } a[i] = mark; //哨兵右侧比他大的数字个数 int big_num = right - i; //如果哨兵刚好是第K大的数 if (k - big_num - 1 == 0) return mark; else if (k - big_num - 1 > 0) { //如果右侧数字个数不够K个,则从左侧找第k-big_num-1大的数 return quickfind(a, left, i - 1, k - big_num - 1); } else { //如果右侧数字个数比K多,则在右侧找第K大的数 return quickfind(a, i + 1, right, k); } } };
4.标题:求最小公倍数|时间限制:1秒|内存限制:32768k
正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数
输入描述:
输入两个正整数A和B
输出描述:
输出A和B的最小公倍数
示例:
输入:
5
7
输出:
35
(https://www.nowcoder.com/questionTerminal/22948c2cad484e0291350abad86136c3)
#include<iostream> using namespace std; int gcd(int a, int b) // greatest common divisor { while(a%b){ int tmp = a; a = b; b = tmp%b; } return b; } int main() { int a,b; while(cin >> a >> b){ cout << a*b/gcd(a,b) <<endl; } return 0; }
5.标题:计算日期到天数转换|时间限制:1秒|内存限制:32768K
根据输入的日期。计算是这一年的第几天
详细描述:
输入某年某月某日,判断这一天是这一年的第几天?
接口设计及说明:
/**********************************
Descrription:数据转换
Input Param:year输入年份
Month输入月份
Day输入天
OutParam:
Return Value:成功返回0,失败返回-1(如:数据错误)
************************************/
public static int iConverDateToDay(int year,int month,int day)
{
/*在这里实现功能,将结果填入输入数组中*/
return 0;
}
/**************************************************************
Description:
Input Param:
OutParam:
Return Value:成功:返回outDay输入计算后的第几天;
失败:返回-1
****************************************************************/
public static int getOutDay()
{
return 0;
}
输入描述:
输入三行,分别是年,月,日
输出描述:
成功:返回outDay输出计算后的第几天;
失败:返回-1
示例:
输入: 2012
12
31
输出:
366
(https://www.nowcoder.com/questionTerminal/769d45d455fe40b385ba32f97e7bcded?pos=16&orderByHotValue=1)
#include<iostream> using namespace std; const int days[] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 }; int main() { int y, m, d; while (cin >> y >> m >> d) { int ans = days[m - 1] + d; if (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) && m > 2) ans++; cout << ans << endl; } return 0; }
6.标题:[中级]单词倒排|时间限制:1秒|内存限制:32768k
对字符串中的所用单词进行倒排
说明:
1.每个单词是以26个大写或小写英文字母构成;
2.非构成单词的字符均视为单词间隔符
3.要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4.每个单词最长20个字母;
输入描述:
输入一行以空格来分隔的句子
输出描述:
输出句子的逆序
示例:
输入:i am a student
输出:student a am i
(https://www.nowcoder.com/questionTerminal/81544a4989df4109b33c2d65037c5836)
#include<iostream> #include<sstream> #include<string> #include<vector> using namespace std; void deal(vector<string>&res,string& str, char delim = ‘ ‘) { stringstream ss; ss << str; string tmp; while (ss>>tmp) { res.push_back(tmp); } } int main() { string str; while (getline(cin, str)) { vector<string> res; for (int i = 0; i < str.size(); i++) if (!isalnum(str[i])) str[i] = ‘ ‘; deal(res, str); cout << res[res.size() - 1]; for (int i = res.size() - 2; i >= 0; i--) cout << " " << res[i]; cout << endl; } return 0; }
7.标题:删除字符串中出现次数最少的字符|时间限制:1秒|内存限制:32768k
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其他字符保持原来的顺序
输入描述:
字符串只包含小写英文字母,不考虑非法输入,输入的字符串长度小于等于20个字节
输出描述:
删除字符串中出现最少的字符后的字符串
示例:
输入:abcdd
输出:dd
(https://www.nowcoder.com/questionTerminal/05182d328eb848dda7fdd5e029a56da9?orderByHotValue=1&page=6&onlyReference=false)
#include <iostream> #include <string> using namespace std; int main() { int i, m,min; int a[26]; string str,temp; while (cin >> str) { for (int i = 0; i < 26; i++) a[i] = 0; m = str.size(); for (i = 0; i<m; i++) a[str[i]-‘a‘]++; min = a[str[0]-‘a‘]; for (i = 0; i<m; i++) if (a[str[i] - ‘a‘] <= min) min = a[str[i]-‘a‘]; for (i = 0; i < m; i++) if (a[str[i] - ‘a‘] > min) cout << str[i]; cout << endl; } return 0; }
8.标题:字符串反转|时间限制:1秒|内存限制:32668k
写出一个程序,接受一个字符串,然后输出该字符串翻转后的字符串。例如:
输入描述:
输入N个字符
输出描述:
输出该字符串反转后的字符串
示例:
输入:abcd
输出:dcba
#include<iostream> #include<vector> #include<string> #include<algorithm> #include<cmath> #include<unordered_map> using namespace std; int main(){ string s; getline(cin, s); for (int i = s.size() - 1; i >= 0;i--) cout << s[i]; cout << endl; return 0; }
9.标题:奇数位丢弃|时间限制:1秒|内存限制:32768k
对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一
过程直到最后剩下一个数。请求出最后剩下的数字。
输入描述:
每个数据一行一个数字,为题目中的n(n小于等于1000)
输出描述:
一行输出最后剩下的数字
示例:
输入:500
输出:255
(https://www.nowcoder.com/questionTerminal/196141ecd6eb401da3111748d30e9141?source=relative)
#include <cstdio> int main() { int n; while(scanf("%d", &n) != EOF){ int b = 1; while(b <= n + 1){ b <<= 1; } printf("%d ", (b >> 1) - 1); } return 0; }
10.标题:阶乘尾零|时间限制:3秒|内存限制:32768k
请设计一个算法,计算n的阶乘有多少个尾随零
给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数
示例:
输入:5
返回:1
(https://www.nowcoder.com/questionTerminal/434922f9f4724b97b83c417e884008f1)
class Factor { public: int getFactorSuffixZero(int n) { int base=5,count=0; while(base<=n) { count+=n/base; base*=5; } return count; } };
以上是关于java 输入数字 输出英文的主要内容,如果未能解决你的问题,请参考以下文章