正整数的汉语读法

2024-03-17 15:32
文章标签 正整数 汉语 读法

本文主要是介绍正整数的汉语读法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:现在让你在普通的计算器(位数最多12位)上增加一个功能button,点击这个button之后能进行数字显示模式的切换,即能显示我们汉语对数字表达的习惯。比如计算器最初显示“零”,你按“1”这个按键之后,屏幕显示的是“一”,继续按”9”这个键,显示的是”十九”,继续按“0”这个键,显示的是“一百九十”… …而且,还要增加两个功能button,“退格键”和“清空键”。继续按退格键,显示的是“十九”,继续按“清空建”,显示的是“零”。

正确代码置顶:

------------------------------------------------------------------------------------

如果位数很大,兆以上的单位可以用getBase函数来获得,那么代码可以这么写:

1. 分段,如果不存在0,在len-i ==5 , == 9, == 13的位置输出万,亿,兆,其他位置输出数字+十百千即可

2. 如果存在0,遍历这段连续的0,如果中间经历len-i == 13, 9, 5的位置,输出相应的第一个单位兆>亿>万,之后break

·这里得强调一下: 当前一个非0输出一个base后,这个时候连续4个0是不用被输出的!!!!所以有了(k-i)%4 != 3

3. 如果0是末位,中间不用加0,否则要加一个0

#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
using namespace std;
string getBase(int num) {if (num == 5)return "万";else if (num == 9)return "亿";else if (num == 13)return "兆";elsereturn "";
}
Another version:int main() {string input = "101030100105";string res = "";string num[] = {"零","一","二","三","四","五","六","七","八","九"};string unit[] = {"千","","十","百"};int len = input.length(), i, j;for (i = 0; i < len; ) {if (input[i] != '0') {res += num[input[i]-'0'];res += unit[(len-i)%4];res += getBase(len-i);++i;}else {int j = i;while (j < len && input[j] == '0')++j;     for (int k = i; k < j; ++k)if (getBase(len-k) != "" && (k-i)%4 != 3) {res += getBase(len-k);break;}if (j != len)res += "零";i = j;}}return 0;
}

-------------------------------------------------------------------------------------

注意连续的0的位置即可:

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
string print(const string& num) {string str[] = {"零","一","二","三","四","五","六","七","八","九","十","百","千"};string unit[] = {"十","百","千"};string res = "";int i, j, len = num.length();for (i = 0; i < len; ++i) {if (num[i] == '0') {for (j = i + 1; num[j] == '0' && j < len; ++j);if (len - (i - 1) >= 6 && len - j <= 4)res += "万";if (j != len)res += "零";i = j - 1;continue;}else {res += str[num[i] - '0'];//cout << (len - i) % 5 << endl;// 2 3 4  6 7 8if ((len - i) % 4 != 1)res += unit[(len - i - 2) % 4];}if (len - i == 5)res += "万";if (len - i == 9)res += "亿";}return res;
}
int main() {string s = "1010";cout << print(s) <<endl;return 0;
}

如果位数很大,兆以上的单位可以用getBase函数来获得,那么代码可以这么写:

1. 分段,如果不存在0,在len-i ==5 , == 9, == 13的位置输出万,亿,兆,其他位置输出数字+十百千即可

2. 如果存在0,遍历这段连续的0,如果中间经历len-i == 13, 9, 5的位置,输出相应的第一个单位兆>亿>万,之后break

3. 如果0是末位,中间不用加0,否则要加一个0

把握这三点即可。。。

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
string getBase(int i) {if (i == 5)return "万";else if (i == 9)return "亿";else if (i == 13)return "兆";elsereturn "";
}string print(const string& num) {string str[] = {"零","一","二","三","四","五","六","七","八","九"};string unit[] = {"十","百","千"};string res = "";int i, j, len = num.length();for (i = 0; i < len; ++i) {if (num[i] == '0') {for (j = i + 1; num[j] == '0' && j < len; ++j);for (int k = len - i; k >= len - j; --k) {string tmp = getBase(k);if (tmp != "") {res += tmp;break;}}if (j != len)res += "零";i = j - 1;continue;}else {res += str[num[i] - '0'];//cout << (len - i) % 5 << endl;// 2 3 4  6 7 8if ((len - i) % 4 != 1)res += unit[(len - i - 2) % 4];}res += getBase(len - i);}return res;
}
int main() {string s = "101030100105";cout << print(s) <<endl;return 0;
}

#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
using namespace std;
string getBase(int num) {if (num == 5)return "万";else if (num == 9)return "亿";else if (num == 13)return "兆";elsereturn "";
}
Another version:int main() {string input = "101030100105";string res = "";string num[] = {"零","一","二","三","四","五","六","七","八","九"};string unit[] = {"千","","十","百"};int len = input.length(), i, j;for (i = 0; i < len; ) {if (input[i] != '0') {res += num[input[i]-'0'];res += unit[(len-i)%4];res += getBase(len-i);++i;}else {int j = i;while (j < len && input[j] == '0')++j;     for (int k = i; k < j; ++k)if (getBase(len-k) != "" && (k-i)%4 != 3) {res += getBase(len-k);break;}if (j != len)res += "零";i = j;}}return 0;
}


#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
using namespace std;
string getBase(int num) {if (num == 5)return "万";else if (num == 9)return "亿";else if (num == 13)return "兆";elsereturn "";
}
Another version:int main() {string input = "101030100105";string res = "";string num[] = {"零","一","二","三","四","五","六","七","八","九"};string unit[] = {"千","","十","百"};int len = input.length(), i, j;for (i = 0; i < len; ) {if (input[i] != '0') {res += num[input[i]-'0'];res += unit[(len-i)%4];res += getBase(len-i);++i;}else {int j = i;while (j < len && input[j] == '0')++j;     for (int k = i; k < j; ++k)if (getBase(len-k) != "" && (k-i)%4 != 3) {res += getBase(len-k);break;}if (j != len)res += "零";i = j;}}return 0;
}


这篇关于正整数的汉语读法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819359

相关文章

【C++题解】1108 - 正整数N转换成一个二进制数

问题三:1108 - 正整数N转换成一个二进制数 类型:字符串、进制转换 题目描述: 输入一个不大于 32767 的整数 n ,将它转换成一个二进制数。 输入: 输入只有一行,包括一个整数 n (0≤n≤32767)。 输出: 输出只有一行。 样例: 输入: 100 输出: 1100100 输入: 0 输出: 0 完整代码如下: #inclu

正则 正整数bug

/^[0-9]{1,}(\.[0-9]{1,}){0,1}$/ 有一个情况是 要验证的数字是整数 但是实际上是 1.0这种形式, 如果是1.0的形式 使用这个正则是会报错的 /^[0-9]*[1-9][0-9]*$/ 可能是不认1.0 但是用最上面的那个正则就没事,可能是多了一层判断。 其实也是要注意把数字改了1.0为0就好了。

找出未出现的最小正整数

给定一个含n(n≥1)个整数的数组,找出数组中未出现的最小正整数。例如,数组{-5, 3, 2, 3}中未出现的最小正整数是1;数组{1, 2, 3}中未出现的最小正整数是4。 方法一: 思想。对数组进行快速排序,然后进行遍历数组。 ①第一个元素大于0,且不为1,则最后返回1;出现正数之前的元素为负数,且第一个正数不为1,则返回1。例如:-1,2,3;例如,2,3,4  ②现的正整数之间差

华为OD机试 - 分解连续正整数组合 - 数学推导(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述

浙大版 输入一个正整数n(1≤n≤10),打印一个n行n列的方阵。当n=4时,打印如下方阵:

输入一个正整数n(1≤n≤10),打印一个n行n列的方阵。当n=4时,打印如下方阵: 观察首项都是n*(n-1)+1 每次换行后多减一个n 所以循环中i-=n #include<stdio.h>int main(){int i, j, n;//设三个整数scanf("%d", &n);//输入整数n的值for (i=n*(n-1); i >= 0;i-=n){//循环次数for (j =

本题要求编写程序,计算并输出2个正整数的和、差、积、商。题目保证输入和输出全部在整型范围内。

/* 题目描述 本题要求编写程序,计算并输出2个正整数的和、差、积、商。 题目保证输入和输出全部在整型范围内。  输入 输入在一行中给出2个正整数A和B。 输出 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 */  #include<stdio.h> #include<math.h>  int main() {     int num1,num2;     scan

求不超过N的正整数中因子最多的数

描述 Given an integer n, for all integers not larger than n, find the integer with the most divisors. If there is more than one integer with the same number of divisors, print the minimum one. 输入 One

数学中字母的读法发音

α Α 阿拉法 β Β 北塔 γ Γ 咖吗  δ Δ 德儿塔 ε Ε 易普塞龙 ζ Ζ 贼塔 η Η 姨塔 θ Θ 习塔 ι Ι 哎欧塔 κ Κ 卡怕 λ ∧ 蓝母达 μ Μ 谬 ν Ν 拗 ξ Ξ 可赛 ο Ο 欧麦克龙 π ∏ 派 ρ Ρ 漏 σ ∑ 西格马 τ Τ 掏 υ Υ 优普塞龙 φ Φ fai(夫爱切) χ Χ 开(去声) ψ Ψ 坡赛 ω Ω 欧梅咖

算法9—两个巨大正整数相加

两个巨大整数相加,可能会造成溢出,或者它的大小已经超出基本数据类型的范围,所以,我们对巨大整数进行相加时,可以把它们转换成字符串,然后通过字符串的处理进行整数相加。 这里有两种做法:第一种,把整数存在一个字符数组里进行处理。代码如下: [java]  view plain copy public static String addThroughArray(String

给定正整数n,计算出n个元素的集合{1,2,....,n}可以划分为多少个不同的非空集合

给定正整数n,计算出n个元素的集合{1,2,....,n}可以划分为多少个不同的非空集合 附源代码: #include<iostream>using namespace std;int F(int n,int m){if(n<=2)return 1;if(m==1||n==m)return 1;elsereturn F(n-1,m-1)+m*F(n-1,m);}void main(