将中文大写数字日期转化为大写阿拉伯数字一到十日期

在一次面试中遇到一个有意思的小算法题:要求将阿拉伯数字转为汉字显示出来(包含单位)。
当时虽然实现出来,但是代码写的有点凌乱。所以回家后,重新整理了一下。
这个算法有几个小的注意点:
1、中文字符占两个字节,所以如果用C语言实现,需要用char数组的形式保存单个汉字。
2、如果数字中出现连续的零,需要把它替换为单一的零。
3、在亿、万、元的前面一个汉字不可以为零(人民币读取方式决定)。
4、double数值可分为整数部分和小数部分。小数部分较简单,整数部分需要根据这个数字所在的位数匹配上对应的单位。
具体方法是:设置一个单位映射字符串表g_strUnit,可视为一个简单的HashTable。然后从头开始读取整数字符串的每个
字符,若这个字符在整数字符串的位置为i,这个字符后面的单位就是g_strUnit[length-<span style="color: #-i]。
/*******************************************************************************Project&Code&&:&AccountFile&name&&&&&:&Author&&&&&&&&:&LatteDescription&&&:&阿拉伯数字转为中文字符串Function&List&:--------------------------------------------------------------------------------History:Date&&&&&&&&&&&&Author&&&&&&&&&&Modification&&&&&&&&Latte&&&&&&&&&&&created&file.*******************************************************************************/#include&"stdafx.h"#include&&string&#include&&iostream&using&namespace&#define&MAX&100string&g_strDigit[]&=&{"零",&"壹",&"贰",&"叁",&"肆",&"伍",&"陆",&"柒",&"捌",&"玖"};string&g_strUnit[]&=&{"圆",&"拾",&"佰",&"仟",&"万",&"拾",&"佰",&"仟",&"亿",&&&&&&&&&&&&&&&&&&&&&&&"拾",&"佰",&"仟",&"万",&"拾",&"佰"};string&g_strUnit2[]&=&{"角",&"分"};/*******************************************************************************Func&Name&&&&&&&:&ReplaceSubStrDate&Created&&&&:&Author&&&&&&&&&&:&LatteDescription&&&&&:&将源字符串strOrig中第一个匹配strSub的子串部分替换为strReplaceInput&&&&&&&&&&&:&&&&&&&&&&&&&&&&&&&string&&strOrig,&&&&&&&&&&&&&&&&&&&string&strSub,&&&&&&&&&&&&&&&&&&&string&strReplaceOutput&&&&&&&&&&:&&&&&&&&&&&&&&&&&&&string&&strOrigReturn&&&&&&&&&&:&&&&&&&&&&&&&&&&&&&intCaution&&&&&&&&&:&返回值如果为-1,则表示替换失败或未找到替换项*******************************************************************************/int&ReplaceSubStr(string&&strOrig,&string&strSub,&string&strReplace){&&&&int&pos&=&(int)strOrig.find(strSub);&&&&int&length&=&(int)strSub.length();&&&&&&&&if&(pos&&=&<span style="color: #)&&&&{&&&&&&&&strOrig.replace(pos,&length,&strReplace);&&&&&&&&return&<span style="color: #;&&&&}&&&&&&&&return&-<span style="color: #;}/*******************************************************************************Func&Name&&&&&&&:&NumToChineseStrDate&Created&&&&:&Author&&&&&&&&&&:&LatteDescription&&&&&:&&&&&&&&&&&&&&&&&&&将人民币double数值转化为人民币汉字stringInput&&&&&&&&&&&:&&&&&&&&&&&&&&&&&&&double&moneyOutput&&&&&&&&&&:&Return&&&&&&&&&&:&&&&&&&&&&&&&&&&&&&stringCaution&&&&&&&&&:*******************************************************************************/string&NumToChineseStr(double&money){&&&&int&i&&&&&&&&&&&&&&&=&<span style="color: #;&&&&int&ret&&&&&&&&&&&&&=&<span style="color: #;&&&&int&length&&&&&&&&&&=&<span style="color: #;&&&&char&*p&&&&&&&&&&&&&=&NULL;&&&&char&*pcDecimal&&&&&=&NULL;&//保存小数部分字符&&&&char&czNumber[MAX]&&=&{<span style="color: #};&&//保存完整数字部分字符&&&&string&strR&&&&cout&&&&"======================================"&&&&&&&&cout&&&&money&&&&&&&&//判断是否为小数&&&&if&(money&&&<span style="color: #)&&&&{&&&&&&&&strResult&=&"不支持读负数";&&&&&&&&&&&return&strR&&&&&&&}&&&&//将数字转为数字字符串,利用sprintf_s的正则转换&&&&sprintf_s(czNumber,&MAX,&"%.15lg",&money);&&&&printf("[No.0]%s\n",&czNumber);&&&&&//如果数字是太大或太小的数,因为已经转为科学计数,所以会含有e字符&&&&p&=&strchr(czNumber,'e');&&&&&&if&(NULL!=p)&&&&&{&&&&&&&&strResult&=&"不支持读太大或太小的数";&&&&&&&&return&strR&&&&}&&&&&&&&p&=&strchr(czNumber,&'.');&&&&&&if&(NULL&!=&p)&&&&&{&&&&&&&&&&&&&&&p[<span style="color: #]&=&<span style="color: #;&&&&&&&&&&&&pcDecimal&=&p&+&<span style="color: #;&&&&&&&}&&&&&&&&length&=&(int)strlen(czNumber);&&&&&&&&&&for&(i&=&<span style="color: #;&i&&i++)&&&&&{&&&&&&&&&&&&&&&&if&('<span style="color: #'&==&czNumber[i]&&&&<span style="color: #&!=&((length-<span style="color: #-i)&%&<span style="color: #))&&&&&&&&{&&&&&&&&&&&&strResult&+=&g_strDigit[czNumber[i]&-&'<span style="color: #'];&&&&&&&&}&&&&&&&&&else&&&&&&&&&{&&&&&&&&&&&&strResult&+=&g_strDigit[czNumber[i]&-&'<span style="color: #']&+&g_strUnit[length-<span style="color: #-i];&&&&&&&&}&&&&&&&}&&&&cout&&&&"[No.1]把数字直接替换为汉字:&\n"&&&&strResult&&&&&&&&//把strResult中的所有"零零"子串替换为"零"&&&&while&(<span style="color: #)&&&&{&&&&&&&&ret&=&ReplaceSubStr(strResult,&"零零",&"零");&&&&&&&&if&(ret&&&<span style="color: #)&&&&&&&&{&&&&&&&&&&&&break;&&&&&&&&}&&&&}&&&&cout&&&&"[No.2]替换所有零零为零:&\n"&&&&strResult&&&&&&&&ReplaceSubStr(strResult,&"零亿",&"亿");&&&&ReplaceSubStr(strResult,&"零万",&"万");&&&&if&(strResult&!=&"零圆")&&&&//如果整数部分全为0,则不要去除元单位前面的零&&&&{&&&&&&&&ReplaceSubStr(strResult,&"零圆",&"圆");&&&&}&&&&&&&&cout&&&&"[No.3]去除零亿、零万、零圆前面的零:&\n"&&&&strResult&&&&&&&&//小数精确到两位数,即精确到单位分&&&&if&(NULL&!=&pcDecimal)&&&&&{&&&&&&&&//如果小数部分有数值而整数部分为0,则删除字符串中的零元&&&&&&&&if&(strResult&==&"零圆")&&&&&&&&{&&&&&&&&&&&&strResult.clear();&&&&&&&&}&&&&&&&&i&=&<span style="color: #;&&&&&&&&while&(<span style="color: #)&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&if&(<span style="color: #&==&pcDecimal[i]&||&i&&=&<span style="color: #)&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&strResult&+=&g_strDigit[pcDecimal[i]&-&'<span style="color: #']&+&g_strUnit2[i];&&&&&&&&&&&&i++;&&&&&&&&&&&&&&}&&&&&&&}&&&&cout&&&&"[No.4]小数精确到两位数,即精确到单位分:&\n"&&&&strResult&&&&&&&&&&&&return&strR}int&main(void){&&&&//cout&&&&"Result:&"&&&&NumToChineseStr(0.00)&&&&&&&&//cout&&&&"Result:&"&&&&NumToChineseStr(-345.67)&&&&&&&&//cout&&&&"Result:&"&&&&NumToChineseStr(1000.0)&&&&&&&&cout&&&&"Result:&"&&&&NumToChineseStr(<span style="color: #.012)&&&&&&&&return&<span style="color: #;}
阅读(...) 评论()相关文章推荐
const numberToCN = ['〇','一','二','三','四','五','六','七','八','九','十',
'十一','十二','十三','十四','十五','十六',...
分小数和整数部分进行处理
末尾的零应舍弃
中间有连续多个零,只取一个零
整数部分从右往左以4位为步长扫描...
好久没写了,最近刚好用到一个财务上的金额由数字转换为中文的内容,写了个函数实现,记录下:
class MoneyConstConfig
* 金额数字中文映射
// 数字转中文 支持到12位
var Utils={
units:'个十百千万@#%亿^&~',
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)日期转换为中文大写_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
日期转换为中文大写
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢相关文章推荐
Number.isFinite()用来检查一个数值是否为有限的( finite )。
Number.isFinite(15); // true
Number.isFinite(0.8); // tr...
今天写了一个ajax请求,当获取对象中的某个日期属性时,发现打印出来是一串数字,例如:0。可能有人会有疑问了,明明是日期格式,为什么不返回日期,而返回一串数字呢?其实这串数字是...
分小数和整数部分进行处理
末尾的零应舍弃
中间有连续多个零,只取一个零
整数部分从右往左以4位为步长扫描...
首先给论坛全体拜年了给全国人民拜年了祝六亲眷属皆安乐肚大能容笑口常开!!!
-------------------------------------------------------------
本人是刚入行不久的菜鸟,由于工作可能会用到这个功能于是借鉴了前辈EXTjs前端的这个转大小写功能,用java 仿照写了一个。Long.parseLong(integerNum, 10) > 0)
public class Money {
public static void main(String[] args) {
xString=chang...
代码总体区分为两大块,一个是传入的是整数(用Interger()函数处理);当传入的是小数时(处理到小数点后2位),则将小数拆分为整数部分和小数部分分别处理;
当传入的是小数时候,存在几...
中文转数字,小数的化考虑点字进一步封装即可。# constants for chinese_to_arabic
CN_NUM = {
'〇' : 0, '一' : 1, '二' : 2, '三...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Excel 2010 怎样将日期显示为中文大写?-正解问答-正解网8Excel 2010 怎样将日期显示为中文大写?我要将 Excel 2010 中的阿拉伯数字表单的日期显示为中文大写,怎么操作?我要将 Excel 2010 中的阿拉伯数字表单的日期显示为中文大写,怎么操作?作者:正解网来源:正解网链接:投票8好问题烂问题同问已同问修改分享扫码分享复制网址OK了,粘贴即可!解答:1个同问:0人浏览:108次修改提问Excel 2010 怎样将日期显示为中文大写?&&&&&&#25105;&#35201;&#23558; Excel 2010 &#20013;&#30340;&#38463;&#25289;&#20271;&#25968;&#23383;&#34920;&#21333;&#30340;&#26085;&#26399;&#26174;&#31034;&#20026;&#20013;&#25991;&#22823;&#20889;&#65292;&#24590;&#20040;&#25805;&#20316;&#65311;提交图片把图片文件拖到这里即可上传上传完,点击「插入图片」按钮插入title插入图片图片链接:图片描述:添加取消视频title插入视频视频链接:添加取消出于安全考虑,目前正解网仅支持腾讯视频(支持 HTTPS)的视频播放页链接
提交1个解答7正解Excel 2010 中要将日期显示为中文大写,可以在单元格中输入以下数组公式:=TEXT(&&,&[DBNum2]yyyy年m月d日&)回车后,公式将返回中文大写日期格式。操作步骤本例主要通过 Excel 2010 中的 TEXT 函数中的 [DBNUM2] 参数来完成阿拉伯数字转中文大写。另外,为了避免出现「零壹月」或者「零伍日」之类的显示,特将表示月和日的 M、D 使用单个字符。[DBNUM2] 可以将阿拉伯数字日期转换成中文大写,而使用 [DBNum1] 则可以将阿拉伯数字转换成中文小写。还可以使用 [DBNUM3] ,它的功能是将半角数字转化成全角。例如:=TEXT(123,&[DBNUM3]0&)其结果表示为「 1 2 3 」。阿拉伯数字可以转化成中文大写或者中文小写,但是这个转换不可以逆操作。即中文不可能通过 TEXT 函数转换成阿拉伯数字。Excel 2010 中要将日期显示为中文大写,可以在单元格中输入以下数组公式:
=TEXT(&&,&[DBNum2]yyyy年m月d日&)
回车后,公式将返回中文大写日期格式。操作步骤
本例主要通过 Excel 2010 中的 TEXT 函数中的 [DBNUM2]...作者:正解网来源:正解网链接:收藏已收藏感谢已感谢修改分享扫码分享复制网址OK了,粘贴即可!修改解答&&&&&Excel 2010 &#20013;&#35201;&#23558;&#26085;&#26399;&#26174;&#31034;&#20026;&#20013;&#25991;&#22823;&#20889;&#65292;&#21487;&#20197;&#22312;&#21333;&#20803;&#26684;&#20013;&#36755;&#20837;&#20197;&#19979;&#25968;&#32452;&#20844;&#24335;&#65306;
=TEXT(&&,&[DBNum2]yyyy&#24180;m&#26376;d&#26085;&)
&#22238;&#36710;&#21518;&#65292;&#20844;&#24335;&#23558;&#36820;&#22238;&#20013;&#25991;&#22823;&#20889;&#26085;&#26399;&#26684;&#24335;&#12290;
##&#25805;&#20316;&#27493;&#39588;
&#26412;&#20363;&#20027;&#35201;&#36890;&#36807; Excel 2010 &#20013;&#30340; TEXT &#20989;&#25968;&#20013;&#30340; [DBNUM2] &#21442;&#25968;&#26469;&#23436;&#25104;&#38463;&#25289;&#20271;&#25968;&#23383;&#36716;&#20013;&#25991;&#22823;&#20889;&#12290;&#21478;&#22806;&#65292;&#20026;&#20102;&#36991;&#20813;&#20986;&#29616;&#12300;&#38646;&#22777;&#26376;&#12301;&#25110;&#32773;&#12300;&#38646;&#20237;&#26085;&#12301;&#20043;&#31867;&#30340;&#26174;&#31034;&#65292;&#29305;&#23558;&#34920;&#31034;&#26376;&#21644;&#26085;&#30340; M&#12289;D &#20351;&#29992;&#21333;&#20010;&#23383;&#31526;&#12290;[DBNUM2] &#21487;&#20197;&#23558;&#38463;&#25289;&#20271;&#25968;&#23383;&#26085;&#26399;&#36716;&#25442;&#25104;&#20013;&#25991;&#22823;&#20889;&#65292;&#32780;&#20351;&#29992; [DBNum1] &#21017;&#21487;&#20197;&#23558;&#38463;&#25289;&#20271;&#25968;&#23383;&#36716;&#25442;&#25104;&#20013;&#25991;&#23567;&#20889;&#12290;
&#36824;&#21487;&#20197;&#20351;&#29992; [DBNUM3] &#65292;&#23427;&#30340;&#21151;&#33021;&#26159;&#23558;&#21322;&#35282;&#25968;&#23383;&#36716;&#21270;&#25104;&#20840;&#35282;&#12290;&#20363;&#22914;&#65306;=TEXT(123,&[DBNUM3]0&)&#20854;&#32467;&#26524;&#34920;&#31034;&#20026;&#1 3 &#12301;&#12290;
&#38463;&#25289;&#20271;&#25968;&#23383;&#21487;&#20197;&#36716;&#21270;&#25104;&#20013;&#25991;&#22823;&#20889;&#25110;&#32773;&#20013;&#25991;&#23567;&#20889;&#65292;&#20294;&#26159;&#36825;&#20010;&#36716;&#25442;&#19981;&#21487;&#20197;&#36870;&#25805;&#20316;&#12290;&#21363;&#20013;&#25991;&#19981;&#21487;&#33021;&#36890;&#36807; TEXT &#20989;&#25968;&#36716;&#25442;&#25104;&#38463;&#25289;&#20271;&#25968;&#23383;&#12290;提交图片把图片文件拖到这里即可上传上传完,点击「插入图片」按钮插入title插入图片图片链接:图片描述:添加取消视频title插入视频视频链接:添加取消出于安全考虑,目前正解网仅支持腾讯视频(支持 HTTPS)的视频播放页链接
提交我的解答&&&&&提交图片把图片文件拖到这里即可上传上传完,点击「插入图片」按钮插入title插入图片图片链接:图片描述:添加取消视频title插入视频视频链接:添加取消出于安全考虑,目前正解网仅支持腾讯视频(支持 HTTPS)的视频播放页链接
提交登录正解}

我要回帖

更多关于 阿拉伯数字大写转换器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信