欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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)上,一个汉字是两个字节。要想复制代码到本地运行,注意字节的变化。