整数转换英文表示

解题思路

我们知道,每三位会出现一个千级以上单位,每三个间有个,百,十单位,则可以按照
在这里插入图片描述

num%1000 ,每三位数模拟,三位数后若num>0,则可以使用栈保存新进制(千,百万…)而此单位用一个长度len保存即可

代码

class Solution
{
public:
  string numberToWords(int num)
  {if(num==0)return "Zero";
    int len = 2,p1,p2,p3,p4,p5,p6,p7,p8;
    stack<string> s;
    string result ="";
    while (num)
    {
     p1 = num%1000;
      p2 = p1%100;
      p3 = p1/100;
      if(0<p2&&p2<20)
        s.push(Shift(p2));

      else if(p2>=20)
      {
        p4 = p2%10;
        p2/=10;
        if(p4>0)
        s.push(Shift(p4));
        if(p2>0)
        s.push(ShiftTy(p2));
      }
        if(p3>0)
        {
      s.push(ShiftUnit(1));                
      s.push(Shift(p3));
        }
  
      num/=1000;
      if(num>0)      
      { cout<<len;
     if(len>2&&s.top()==ShiftUnit(len-1))
      {
      s.pop();
      }
          s.push(ShiftUnit(len++));
}
    
    }

    while (!s.empty())
    {
      if(s.size()==1)
      {  
         result+=s.top();
         return result;
         
      }
      result += s.top()+" ";
      s.pop();
    }

   return result;
  }

  string ShiftUnit(int num)//百,千,百万
  {
string nums[]{"","Hundred","Thousand","Million","Billion"};
return nums[num];
  }
  string ShiftTy(int num)//十位
  {
    string nums[]{"", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
    return nums[num - 1];
  }
  string Shift(int num)//1-20
  {
    string nums[]{"", "One", "Two",
                  "Three", "Four", "Five","Six", "Seven", "Eight",
                  "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};

    return nums[num];
  }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王也枉不了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值