欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将阿拉伯数字转换成中文大写金额的形式

程序员文章站 2022-06-17 22:54:29
...

问题:编写控制台程序,用户输入阿拉伯数字的金额,系统自动转换成中文大写金额的形式输出。
例如:输入458796;
转换为:肆拾伍万捌仟柒佰玖拾陆。
问题分析:既然是数字大小写转换,那么我们这样考虑问题:先最高考虑到千万级别。那么我们把这个数抽象成由个、十、百、千、万这么几个位组成。其中个、十、百、千都是一个数一位,而万就有可能是几个万,几十个万,几百几千个万。那么我们不妨把这个数拆成两部分,一部分是“万”,一部分是千百十个。那么对于过万的数,我们就可以先用处理千以下的方法先处理“万”的部分,然后再处理千以下的部分。
本实验代码如下:
处理千位数的函数:

void qianwei_zhuanhuan(int x)      //千位上有数的转换
{
 int n;
 n = x / 1000;
 switch (n)
 {
 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 baiwei_zhuanhuan(int x)       //百位上有数的转换
{
 int n;
 n = x / 100;
 switch (n)
 {
 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;
 default:break;
 }
}

处理十位数的函数:

void shiwei_zhuanhuan(int x)       //十位上有数的转换
{
 int n;
 n = x / 10;
 switch (n)
 {
 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;
 default:break;
 }
}

处理个位数的函数:

void gewei_zhuanhuan(int x)       //个位数转换
{
 int n;
 n = x / 1;
 switch (n)
 {
 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;
 }
}

主函数相关操作如下:

int main()
{
int x, x1, x2;
cout << "请输入金额(不过亿):";
cin >> x;
cout << "您的金额为:" << endl;
if (x > 10000)    //以下是对“万”以上的处理
{
x1 = x / 10000;  //看看有多少个“万”
        if (x1 > 1000)   //超过一千万的情况
 {
     qianwei_zhuanhuan(x1);
 int c;
 c = x1 % 1000;
        if (c >= 100)
  {
  baiwei_zhuanhuan(c);
  int c1 = c % 100;
      if (c1 > 10)
      {
         shiwei_zhuanhuan(c1);
         int c2 = c1 % 10;
         gewei_zhuanhuan(c2);
         }
                                   }
  else
  {
  if (c >= 10 && c < 100)
  {
  cout << "零";
  shiwei_zhuanhuan(c);
  int c2 = c % 10;
  gewei_zhuanhuan(c2);
  }
  if (c >= 1 && c < 10)
  {
  cout << "零";
  gewei_zhuanhuan(c);
  }
 }
  }
  else   //没超过一千万的情况
  {
  if (x1 > 100)
  {
  baiwei_zhuanhuan(x1);
  int c = x1 % 100;
  if (c >= 10 && c < 100)
 {
  shiwei_zhuanhuan(c);
  int c1 = c % 10;
  gewei_zhuanhuan(c1);
  }
  else
  {
  gewei_zhuanhuan(c);
  }
 }
 else
 {
 if (x1 >= 10 && x1 < 100)
 {
 shiwei_zhuanhuan(x1);
 int c = x1 % 10;
 gewei_zhuanhuan(c);
 }
 if (x1 >= 1 && x1 < 10)
                gewei_zhuanhuan(x1);
 }
}
cout << "万";   //“万”以上处理完毕,输出“万”字
x2 = x % 10000; //接下来处理千百十个位
if (x2 >= 1000)
{
qianwei_zhuanhuan(x2);
int c;
c = x2 % 1000;
if (c >= 100)
{
baiwei_zhuanhuan(c);
int c1 = c % 100;
if (c1 > 10)
    {
 shiwei_zhuanhuan(c1);
 int c2 = c1 % 10;
 gewei_zhuanhuan(c2);
          }
}
        else
        {
         if (c >= 10 && c < 100)
        {
         cout << "零";
          shiwei_zhuanhuan(c);
           int c2 = c % 10;
         gewei_zhuanhuan(c2);
             }
 if (c >= 1 && c < 10)
 {
     cout << "零";
     gewei_zhuanhuan(c);
  }
 }
 }
else
{
cout << "零";
if (x2 >= 100)
{
    baiwei_zhuanhuan(x2);
    int c1 = x2 % 100;
    if (c1 > 10)
 {
 shiwei_zhuanhuan(c1);
 int c2 = c1 % 10;
 gewei_zhuanhuan(c2);
 }
   }
else
{
     if (x2 >= 10 && x2 < 100)
      {
 shiwei_zhuanhuan(x2);
 int c2 = x2 % 10;
 gewei_zhuanhuan(c2);
         }
 if (x2 >= 1 && x2 < 10)
 {
       gewei_zhuanhuan(x2);
 }
 }
}
 }
 else   //没过万的情况
 {
 if (x >= 1000)
 {
 qianwei_zhuanhuan(x);
 int c;
 c = x % 1000;
 if (c >= 100)
 {
 baiwei_zhuanhuan(c);
 int c1 = c % 100;
 if (c1 > 10)
 {
 shiwei_zhuanhuan(c1);
 int c2 = c1 % 10;
 gewei_zhuanhuan(c2);
 }
 }
 else
 {
 if (c >= 10 && c < 100)
 {
 cout << "零";
 shiwei_zhuanhuan(c);
 int c2 = c % 10;
 gewei_zhuanhuan(c2);
 }
 if (c >= 1 && c < 10)
 {
 cout << "零";
 gewei_zhuanhuan(c);
 }
 }
                  }
 }
}

以上代码只能处理不过亿的数字,如果数字过大超过亿,按照前面的分析方式拓展延伸,万变不离其宗。

相关标签: c++ 实验