题目:
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
实现思路
通过将输入的数据从左到右依次处理每一位数,如“23108”,先除以10000得到万位为2,再将该数通过取余运算缩小一位得到3108,然后继续除以1000得到千位为3,依次类推得到每一位的数字。并且通过一个switch语句将每一位数后面加一个英文大写的单位输出。
总体代码
#include<iostream>
using namespace std;
int count(int n)//计算该数字共有几位数
{
int t,s=0;
while (n)
{
t = n % 10;
n /= 10;
s++;
}
return s;
}
int maxnumber(int b)
{
int mid=1;
while (b)
{
mid *= 10;
b--;
}
return mid/10;
}
int main()
{
int n,t,x,mid;
char c;
cin >> n;
if (n == 0)
{
cout << 'a';
return 0;
}
int flag=0;
t = count(n);
mid = t;//计算输入的数最大位数
for (int i = maxnumber(t); i > 0; i /= 10)
{
if (n != 0)
{
x = n / i;
if (x == 0)
{
if (flag == 1)
{
if (mid < 9 && mid >5)
cout << "W";//当不是万的整数倍时按中文规则输出
flag = 0;
cout << 'a';
}
}
n %= i;
if (x != 0)
{
c = 'a' + x;
cout << c;
flag = 1;//标记千万,百万,十万位
switch (t)
{
case 9:cout << "Y"; break;
case 8:cout << "Q"; break;
case 7:cout << "B"; break;
case 6:cout << "S"; break;
case 5:cout << "W"; break;
case 4:cout << "Q"; break;
case 3:cout << "B"; break;
case 2:cout << "S"; break;
default:
break;
}
}
}
if (n == 0)
{
if (t < 9 && t >= 5)//输出十万,百万,千万。
cout << "W";
}
t = count(n);
}
return 0;
}