一个将阿拉伯数字转换为中文数字近似读法的程序

简介:

    偶尔突发奇想,写了一个将阿拉伯数字转换为中文数字近似值的程序:

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <stdbool.h>
#include <windows.h>

const char *ChineseNum[] = {"零","一","二","三","四",\
	"五","六","七","八","九","十"};
	
const char *ChineseUnit[] = \
	{"千","百","十","万","亿","兆"};

bool GetPreFix(const char *src,char *back)
{
	if(!src || !back)
		return false;
	
	int count = strlen(src)-1,prefixcount = count%4,lastpos=0;
	for(int i=0;i<prefixcount;++i)
	{
		if(!(lastpos==0 && (int)src[i]-0x30==0))
			strcat(back,ChineseNum[(int)src[i]-0x30]);
		if((int)src[i]-0x30!=0)
			strcat(back,ChineseUnit[3-prefixcount+i]);
		lastpos = (int)src[i]-0x30;
	}
	if((int)src[prefixcount]-0x30!=0)
		strcat(back,ChineseNum[(int)src[prefixcount]-0x30]);
	
	return true;
}

bool GetPostFix(const char *src,char *back)
{
	if(!src || !back)
		return false;
	
	int count = strlen(src)-1,wcount = count/4; 
	int zcount = wcount / 3,zlastcount=wcount % 3;
	
	switch(wcount)
	{
	case 0:
		break;
	case 1:case 2:case 3:
		strcpy(back,ChineseUnit[wcount+2]);
		break;
	default:
		strcpy(back,ChineseUnit[zlastcount+2]);
		while(zcount-->0)
			strcat(back,ChineseUnit[5]);
		break;
	}
	return true;
}

void ShowChineseNearNum(const char *src)
{
	if(!src)
	{
		printf("[%s]err : src == NULL\n",__func__);
		return;
	}
	
	char backpre[] = {[128]=0};
	char backpost[] = {[128]=0};
	
	GetPreFix(src,backpre);
	GetPostFix(src,backpost);
	
	printf("%s 大约等于 %s%s\n",src,backpre,backpost);
}

int main(int argc,char *argv[])
{	
	if(argc != 2)
	{
		printf("usage : %s number\n",argv[0]);exit(1);
	}
	ShowChineseNearNum(argv[1]);
	return 0;
}


D:\Work\SRC\c_src>cnn 124467899868068698758654675785597868968976756485967
124467899868068698758654675785597868968976756485967 大约等于 一百二十四十兆兆兆


相关文章
|
弹性计算 安全 Linux
SSL-VPN和客户端配置|学习笔记
快速学习SSL-VPN和客户端配置
SSL-VPN和客户端配置|学习笔记
|
5月前
|
安全 Java 编译器
使用枚举实现“状态”转换限制
我是小假 期待与你的下一次相遇 ~
189 4
|
7月前
|
Web App开发 搜索推荐 安全
macOS Sonoma 14.7.6 (23H626) 正式版 ISO、IPSW、PKG 下载
macOS Sonoma 14.7.6 (23H626) 正式版 ISO、IPSW、PKG 下载
711 6
macOS Sonoma 14.7.6 (23H626) 正式版 ISO、IPSW、PKG 下载
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
576 1
|
11月前
|
SQL 人工智能 自然语言处理
DataV Note:让Jupyter Notebook绽放新活力
分享阿里云旗下的一款基于Jupyter底座的工具(DataV Note,智能分析文档)给大家。这是一款以Notebook文档形式为基础、由强大AI模型驱动的智能分析、允许多人协作的数据可视分析平台。
574 155
|
11月前
|
存储 人工智能 安全
阿里云服务器五代、六代、七代、八代实例简介及性能提升介绍参考
随着技术的不断进步,阿里云服务器实例也经历了多代升级,从五代实例到最新的八代实例,每一代都在性能、稳定性、能效比等方面取得了显著提升。有的用户由于是初次接触阿里云服务器,所以不是很清楚阿里云服务器五代、六代、七代、八代实例有哪些,它们各自在云服务器性能上有哪些提升。本文将详细介绍阿里云服务器五代、六代、七代、八代实例的特点及性能提升,以供了解及选择。
366 10
阿里云服务器五代、六代、七代、八代实例简介及性能提升介绍参考
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
391 58
|
人工智能 自然语言处理 测试技术
通义灵码一周年
【10月更文挑战第5天】通义灵码一周年体验
276 5
|
存储 Kubernetes 负载均衡
掌握Kubernetes:从零到一的集群管理之旅
【10月更文挑战第18天】掌握Kubernetes:从零到一的集群管理之旅
289 0
|
存储 开发框架 监控
一个轻量级的实时监控工具---WatchDog
一个轻量级的实时监控工具---WatchDog
391 0