昨晚被这题郁闷了一晚上,现在还是想不开。哪位大牛帮我看一下还有哪没 有想到(假如没有-0和01这样的数)
题目:
银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为:
零壹贰叁肆伍陆柒捌玖拾佰仟万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
输入
第一行为测试数据的组数n,后面有n个测试数据。每组测试数据一行,为一个绝对值不超过(10^8 - 1)的整数。
输出
对于每组测试数据,输出一行,即相应的人民币大写表示。
输入示例
2
10101
34
输出示例
壹万零壹佰零壹圆
叁拾肆圆
我的程序:
#include<iostream>
#include<map>
using namespace std;
int main(){
int n,x;
int i,j;
int a[10],b[10];
char* c[8];
c[0]="圆";
c[1]="拾";
c[2]="佰";
c[3]="仟";
c[4]="万";
c[5]="舍";
c[6]="佰";
c[7]="仟";
map<int,string>f;
map<int,string>::iterator iter;
f.insert(map<int, string>::value_type (0,"零"));
f.insert(map<int, string>::value_type (1,"壹"));
f.insert(map<int, string>::value_type (2,"贰"));
f.insert(map<int, string>::value_type (3,"参"));
f.insert(map<int, string>::value_type (4,"肆"));
f.insert(map<int, string>::value_type (5,"伍"));
f.insert(map<int, string>::value_type (6,"陆"));
f.insert(map<int, string>::value_type (7,"柒"));
f.insert(map<int, string>::value_type (8,"捌"));
f.insert(map<int, string>::value_type (9,"玖"));
cin>>n;
while(n--){
cin>>x;
if(x==0){ cout<<"零圆"<<endl; continue; }
if(x<0){ cout<<"负"; x*=-1; }
for(i=0;x/10;i++){ a[i]=x%10; x/=10; }
a[i]=x;
while(i>=0)
{
if(a[i]==0){
if(i>=4)
{
for(;a[i]==0&&i>=4;i--);
if(i==3){
cout<<c[4];
if(a[3]!=0) cout<<f[0];
}
else cout<<f[0];
}
else
{
for(;a[i]==0&&i>=0;i--);
if(i==-1) cout<<c[0];
else cout<<f[0];
}
continue;
}
iter=f.find(a[i]);
cout<<iter->second<<c[i];
i--;
}
cout<<endl;
}
return 0;
}
对回答的大牛,一定30分全部送上,多谢
C++人民币大写转换的一道题
我没有直接用你的代码,而是新写了一段,我觉得这个题还是比较有意思的 转换到中文后还会有很多种情况我就没有一一进行判断,像1000001会出现很多零呀什么,你自己来做吧,对防错也没有进行处理,有需要自己加,主要是交流思路
c++一维数组形式完成人民币小写转大写
if(iNum==0)\/\/如果为0 iAddZero++;else { if(iAddZero>0)szChMoney+=_T("零");szChMoney+=hzNum[iNum];\/\/转换为相应的数字 iAddZero=0;} if(iNum!=0||iLen-i==3||iLen-i==11||((iLen-i+1)%8==0&&iAddZero<4))szChMoney+=hzUnit[iLen-i-1];\/\/添加相应的汉字 } if(...
c++ 人民币小写转大写
{ char str1[][5]={"分","角","圆","拾","佰","仟","万","拾万","佰万","仟万","亿","十亿","百亿","千亿","兆"};char str2[][3]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};char t[20],*p,*q;double a;scanf("%lf",&a);sprintf...
用C++实现:随便输入一个数(包括小数),(1)转化为中文大写(2)转化为人民...
大写: 零人民币: 零3408.64:大写: 三千四百零八点六四人民币: 叁仟肆佰零捌元陆角肆999.168:大写: 九百九十九点一六八人民币: 玖佰玖拾玖元壹角陆分捌1937.93:大写: 一千九百三十七点九三人民币: 壹仟玖佰叁拾柒元玖角叁1459.55:大写: 一千四百五十九点五五人民币: 壹仟肆佰伍拾玖元伍角伍643.965:大写: 六百四...
人民币大小写转换c++程序
cout<<"请输入预转换数额(小于1亿):";cin>>x;while (x>=100000000 ){ if (j>=2){ cout<<"你的错误输入已达3次,你无权再输入!"<<endl;return;} cout<<"你输入的金额超出转换范围,请重新输入!"<<endl;cout<<"请输入预转换数额(小于1亿):";cin>>x;j++;} if (x<=0){...
C++编程输入一个字符,将其大写或者小写.
int main( ){ char x, y ;printf ( " 请输入一个字母:" );scanf ( "%c", &x ) ;if ( x >= 'a' && x <= 'z' )y = x - 32 ;if ( x >= 'A' && x <= 'Z' )y = x + 32 ;printf ( "转换后的字符为:%c\\n" , y ) ;} 代码在DEVC++环境下运行效果如下...
请教一个人民币大写的程序
main(){ double rmb;char s[80];char mo[]="**仟**佰**拾**万**仟**佰**拾**亿**仟**佰**拾**万**仟**佰**拾**圆**角**分\\n";char hz[]="零壹贰叁肆伍陆柒捌玖";int i,n;printf("人民币小写: ");scanf("%lf",&rmb);if(rmb<=0||rmb>=1e16)exit(0);spri...
求C语言程序实现人民币小写转大写
strcat( c_je, "万") ; \/*万位数字为0,加‘万’*\/ if( n-i >= 3 )strcat( c_je, "元");strcat( c_je, "正" ); \/*最后不是分位,加“正”*\/ } return c_je; \/*返回大写金额*\/ } main(){ double count;printf("请输入要转换的金额:");scanf("%lf", &count );pr...
人民币大小写正则表达式怎么写:^[壹贰叁肆伍陆柒捌玖拾佰仟万亿〇一二 ...
如图所示:例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
C 语言、C++语言、VF、VB、Java有何异同?
1、推动软件产业化 众所周知,印度之所以能够成为软件大国,与他们使用英文作为母语是分不开的。现在有了易语言,国人也能够使用自己的母语进行编程,并且所编写出来的源程序可以轻松通过系统附带工具翻译转换为任何一种外文,为我国实现软件产业化和软件批量出口,培养大量软件人才奠定坚实的基础。2、提高社会...