C++人民币转换

  • Post author:
  • Post category:其他


#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
string itos(int i)
{

	switch(i)
	{
		case 0: return "零";
		case 1: return "一";
		case 2: return "二";
		case 3: return "三";
		case 4: return "四";
		case 5: return "五";
		case 6: return "六";
		case 7: return "七";
		case 8: return "八";
		case 9: return "九";
		default:return "";
			break;
	}
}
string iton(int num)
{
	if(num==0)
	{
		return "元整";
	}
	switch (num%8)
	{

	case 0: return "亿";
	case 1: return "十";
	case 2: return "百";
	case 3: return "千";
	case 4: return "万";
	case 5: return "十";
	case 6: return "百";
	case 7: return "千";
	default: return "";
		break;
	}
}
string itol(long long n)
{
	if (n==0)
	{
		return "零元整";
	}
	int i[30];
	int l=0;//人民币的位数
	int k=0;//连续的0的数量
	string result("");
	while (n!=0)
	{
		i[l]=n%10;
		n=n/10;
//		cout<<i[l];//测试用
		l++;		
	}	
	for (int j=l-1;j>=0;j--)
	{
		if (i[j]==0&&j!=0)
		{
			k++;
			switch (j%8)
			{
			case 0:result+=iton(j);break;  //亿
			case 4:if (k<4)
				   {
					   result+=iton(j);  //万位数之前有4个0去掉万
				   }
				   break;
			default:
				if(i[j-1]!=0)
				{
					result+=itos(i[j]);//后面一位仍等于0,去掉这一位的零
				}
				break;
			}
		}
		else
		{
			k=0;
			if (i[j]!=0)
			{
				result+=itos(i[j])+iton(j);  //最后一位不等于0
			}
			else
			{
				result+=iton(j);  //最后一位等于0,把零去掉
			}
		}
	}
	return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
	long long n;
	do 
	{
		cout<<"please input a number(1~1000000000000000000):(0 to break)";
		cin>>n;		
		cout<<itol(n);
	} while (n);
	getch();
	return 0;
}



版权声明:本文为chjf290原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。