人民币金额大写

人民币金额大写

时间: 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;
	}
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注