【算法题】一亿以内中文数字转int & int转中文数字

public class ChineseNumberToInt {

    public static void main(String[] args) {
        String test = "一万零一";
        System.out.println(solve(test));
        System.out.println(solve(10001));
    }

    public static int solve(String s) {
        int i = s.indexOf("万");
        if (i != -1) {
            int l = solve(s.substring(0, i));
            int r = solve(s.substring(i+1));
            return l*10000 + r;
        }
        i = s.indexOf("千");
        if (i != -1) {
            int l = solve(s.substring(0, i));
            int r = solve(s.substring(i+1));
            return l*1000 + r;
        }
        i = s.indexOf("百");
        if (i != -1) {
            int l = solve(s.substring(0, i));
            int r = solve(s.substring(i+1));
            return l*100 + r;
        }
        i = s.indexOf("十");
        if (i != -1) {
            int l = solve(s.substring(0, i));
            if (l == 0)
                l = 1;
            int r = solve(s.substring(i+1));
            return l*10 + r;
        }
        i = s.indexOf("零");
        if (i != -1) {
            int l = solve(s.substring(0, i));
            int r = solve(s.substring(i+1));
            return l + r;
        }
        i = 0;
        switch (s) {
            case "九":
                return 9;
            case "八":
                return 8;
            case "七":
                return 7;
            case "六":
                return 6;
            case "五":
                return 5;
            case "四":
                return 4;
            case "三":
                return 3;
            case "二":
                return 2;
            case "一":
                return 1;
        }
        return 0;
    }

    public static String solve(int n) {
        int w = n / 10000, q = n / 1000, b = n / 100, s = n / 10;
        if (w > 0) {
            String l = solve(n/10000);
            String r = solve(n%10000);
            if ((n%10000)/1000 == 0)
                r = "零" + r;
            return l + "万" + r;
        }
        if (q > 0) {
            String l = solve(n/1000);
            String r = solve(n%1000);
            if ((n%1000)/100 == 0)
                r = "零" + r;
            return l + "千" + r;
        }
        if (b > 0) {
            String l = solve(n/100);
            String r = solve(n%100);
            if ((n%100)/10 == 0)
                r = "零" + r;
            return l + "百" + r;
        }
        if (s > 0) {
            String l = solve(n/10);
            String r = solve(n%10);
            return l + "十" + r;
        }
        switch (n){
            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 "九";
        }
        return "";
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是 Go 语言实现雪花算法获取100000以内的数字的示例代码: ```go package main import ( "fmt" "math/rand" "time" ) const ( workerIDBits = 5 datacenterIDBits = 5 maxWorkerID = -1 ^ (-1 << workerIDBits) maxDatacenterID = -1 ^ (-1 << datacenterIDBits) sequenceBits = 12 workerIDShift = sequenceBits datacenterIDShift = sequenceBits + workerIDBits timestampLeftShift = sequenceBits + workerIDBits + datacenterIDBits sequenceMask = -1 ^ (-1 << sequenceBits) ) type snowflake struct { lastTimestamp int64 sequence int64 workerID int64 datacenterID int64 } func newSnowflake(workerID, datacenterID int64) *snowflake { if workerID < 0 || workerID > maxWorkerID { panic(fmt.Sprintf("Worker ID out of range: %d", workerID)) } if datacenterID < 0 || datacenterID > maxDatacenterID { panic(fmt.Sprintf("Datacenter ID out of range: %d", datacenterID)) } return &snowflake{ workerID: workerID, datacenterID: datacenterID, } } func (sf *snowflake) nextID() int64 { timestamp := time.Now().UnixNano() / 1000000 if timestamp < sf.lastTimestamp { panic(fmt.Sprintf("Invalid timestamp: %v - precedes %v", timestamp, sf.lastTimestamp)) } if timestamp == sf.lastTimestamp { sf.sequence = (sf.sequence + 1) & sequenceMask if sf.sequence == 0 { timestamp = sf.waitNextMillis(timestamp) } } else { sf.sequence = rand.Int63() & sequenceMask } sf.lastTimestamp = timestamp return (timestamp << timestampLeftShift) | (sf.datacenterID << datacenterIDShift) | (sf.workerID << workerIDShift) | sf.sequence } func (sf *snowflake) waitNextMillis(currentTimestamp int64) int64 { for currentTimestamp == sf.lastTimestamp { currentTimestamp = time.Now().UnixNano() / 1000000 } return currentTimestamp } func main() { sf := newSnowflake(1, 1) for i := 0; i < 100000; i++ { fmt.Println(sf.nextID()) } } ``` 在运行该程序时,会输出100000个雪花算法生成的 ID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Deamon Tree

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

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

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

打赏作者

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

抵扣说明:

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

余额充值