人民币金额大写
时间: 1ms 内存:128M
描述:
在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。
本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。
输入:
输出:
示例输入:
35201
示例输出:
叁万伍仟贰佰零壹
提示:
参考答案(内存最优[1092]):
#include<cstdio>
#include<cstring>
char str[7][4]={"十","佰","仟"};
char stc[10][4]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
char a[1005];
int n;
int Nflag;
void print(int k,int f,int t)
{
int flag=0;
for(int i=k;i<f;i++)
{
if(a[i]!='0')
{
if(Nflag==1)
{
printf("零");
Nflag++;
}
if(i!=k&&a[i-1]=='0'&&Nflag<2)
{
printf("零");
}
printf("%s",stc[a[i]-'0']);
if(f-i-2>=0)
printf("%s",str[f-i-2]);
flag=0;
Nflag=0;
}
if(a[i]=='0')
flag++;
}
if(flag>0)
{
Nflag=1;
}
if(flag!=4)
{
if(t==2)
printf("亿");
if(t==1)
printf("万");
}
}
int main()
{
scanf("%s",&a);
n=strlen(a);
int t=n/4;
int d=n-t*4;
if(d!=0)
print(0,d,t);
for(int i=d;i<n;i+=4)
{
t--;
print(i,i+4,t);
}
return 0;
}
参考答案(时间最优[0]):
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
void priwei(int wei);
void prinum(int num);
int n;
cin>>n;
int test=n;
int WEI=0;
int i,j;
int a[10];
while(test) // 下标0,个位
{
a[WEI++]=test%10;
test/=10;
}
bool ling=false;
for(i=WEI-1;i>=0;i--)
{
if(a[i]!=0)
{
if(ling)
{
ling=false;
cout<<"零";
}
prinum(a[i]);
priwei(i);
}
else
{
if(i==4)
{
bool quan0=true;
if(WEI<8)quan0=false;
else
{
for(j=4;j<8;j++)
{
if(a[j]!=0)
{
quan0=false;
break;
}
}
}
if(!quan0)
cout<<"万";
}
else if(i==8)cout<<"亿";
else
ling=true;
}
}
cout<<endl;
return 0;
}
void priwei(int wei)
{
switch(wei)
{
case 1:cout<<"拾";break;
case 2:cout<<"佰";break;
case 3:cout<<"仟";break;
case 4:cout<<"万";break;
case 5:cout<<"拾";break;
case 6:cout<<"佰";break;
case 7:cout<<"仟";break;
case 8:cout<<"亿";break;
case 9:cout<<"拾";break;
}
}
void prinum(int num)
{
switch(num)
{
case 1:cout<<"壹";break;
case 2:cout<<"贰";break;
case 3:cout<<"叁";break;
case 4:cout<<"肆";break;
case 5:cout<<"伍";break;
case 6:cout<<"陆";break;
case 7:cout<<"柒";break;
case 8:cout<<"捌";break;
case 9:cout<<"玖";break;
}
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。