xiaomi OJ第17题
程序员文章站
2022-05-22 14:55:52
...
小米OJ第17题:
描述:
实现一个算法,可以将小写数字转换成大写数字。
输入:
输入一个整数。范围在0~450亿之间。
输出:
输出对应的大写数字,以“元整”结尾。 大写数字要符合汉语读写习惯。
// xiaomiOJ_17.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char money_num[] = "零壹贰叁肆伍陆柒捌玖拾";
char money_unit[] = "元拾佰仟万拾佰仟亿拾佰";
char A[12];
void output_chinese_num(int i) {
printf("%c%c%c", money_num[(A[i] - '0') * 3], money_num[(A[i] - '0') * 3 + 1], money_num[(A[i] - '0') * 3 + 2]);
}
void output_chinese_unit(int Tmp) {
printf("%c%c%c", money_unit[3 * (Tmp - 1)], money_unit[3 * (Tmp - 1) + 1], money_unit[3 * (Tmp - 1) + 2]);
}
int find() {
gets(A);
int N = strlen(A);
int Tmp = N;
for (int i = 0; i < N; i++) {
if (A[i] != '0' && i < N) { //中间没有0
output_chinese_num(i);
output_chinese_unit(Tmp);
}
else if (A[i] == '0' && i < N - 1 && A[i + 1] == '0' && (N - i != 5 && N - i != 9)) { //中间有0,但是每个0都不相邻
}
else if (A[i] == '0' && (N - i == 5 || N - i == 9)) {
//output_chinese_num(i);
output_chinese_unit(Tmp);
}
else if (A[i] == '0' && A[i + 1] != '0' && i < N - 1) { //中间有0,但是0与0之间相邻
output_chinese_num(i);
}
else if (N == 1) {
output_chinese_num(i);
output_chinese_unit(Tmp);
return 0;
}
else if (A[i] == '0' && i == N - 1) { //最后有0
output_chinese_unit(Tmp);
return 0;
}
Tmp--;
}
return 0;
}
int main()
{
find();
//cout << endl;
printf("整");
return 0;
}
注意:
1:在小米OJ上一个汉字占3个字节,在本地编译器(如VS2019)上,一个汉字是两个字节。要想复制代码到本地运行,注意字节的变化。
上一篇: 六,Android Xml解析
下一篇: 银行试水大数据时代