”让男友打十万个「对不起」道歉,汉字标上多少遍。如何快速检查中间没有漏?“的坚决方案

原创 2016年06月01日 21:09:53

源于知乎上的这个问题https://www.zhihu.com/question/27231908
解决方案:
用数组来存储汉字,堆栈存储每次遍历到的数字需要的汉字

import java.util.Stack;

public class Main {

    static String[] values = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
    static String[] pos = {"拾", "佰", "仟", "万"};
    private static Stack<String> mStack;

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 1; i <= 99999; i++) {
            if (i >= 10 && i < 20) {
                System.out.println("对不起 第" + change(i).substring(1) + "遍");
            } else {
                System.out.println("对不起 第" + change(i) + "遍");
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("运行时间" + (end - start) + "ms");
    }

    private static String change(int i) {
        boolean flag = false;
        int len = 0;
        int num = i;
        while (i > 0) {
            i /= 10;
            len++;
        }
        if (len > 1) {
            mStack = new Stack<String>();
            for (int j = 1; j < len; j++) {
                if (numAtInteger(num, j) != 0)
                    mStack.push(pos[j - 1]);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int j = len - 1; j > 0; j--) {
            int temp = (num / ((int) Math.pow(10, j)));
            num %= ((int) Math.pow(10, j));
            if (temp != 0) {
                sb.append(values[temp]);
                sb.append(mStack.pop());
            }
            if (temp == 0 && !flag) {
                sb.append("零");
                flag = true;
            }
        }
        if (num == 0) {
            if (sb.toString().endsWith("零")) {
                return sb.substring(0, sb.length() - 1);
            }
            return sb.toString();
        } else {
            sb = sb.append(values[num]);
            return sb.toString();
        }
    }
    static int numAtInteger(int num, int j) {
        while (j > 0) {
            num /= 10;
            j--;
        }
        return num % 10;
    }
}

关于《草根》杂志第六期漏写作者和疏于校对的道歉信

由于《草根》杂志编辑的疏漏,在第六期的《草根》杂志上,漏写了《PHP企业开发学习攻略 –初学者必看》一问的作者名和作者介绍等内容,也由于编辑的校对失误,造成了一篇有抄袭嫌疑的文章被当作原创文章发表,再...

人生最大的遗憾,莫过于没有程序员男友

是的,你没看错,程序员男友,是这个世界上最好的男朋友。 和程序员谈恋爱,你能在每天晚上十一点半,准时收到由简易程序自动发出的晚安;过生日虽然收不到CPB,但他能兴致满满的给你的电脑换...

小娴的男友小旭不幸患了一种怪病,这种怪病吞噬了他的大部分记忆,同时让他突然间不会书写符合正确语序的英文。神奇的是,虽然他写出的句子看上去杂乱无章,不过经过仔细分析可以发现,如果把单词的顺序倒过来,语法

小娴的男友小旭不幸患了一种怪病,这种怪病吞噬了他的大部分记忆,同时让他突然间不会书写符合正确语序的英文。神奇的是,虽然他写出的句子看上去杂乱无章,不过经过仔细分析可以发现,如果把单词的顺序倒过来,语法...

去除VS2010对汉字的拼写检查后留下的红色波浪线

去除VS2010对汉字的拼写检查后留下的红色波浪线 - varding - 博客园 hQGHuMEAyLn('[id="bb9c190068b8405587e5006f905e790c"]');...

DLINQ 使用DataContext快速构建数据访问层DAL,发现Updata采用Attach(Entity t,true)困难重重!(如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体)的解决办法!

如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体。DLinq Attach(Entity t,true);使用过程中碰到的问题!...

UPS电源检查方案及技术措施

  • 2015年07月16日 21:56
  • 216KB
  • 下载

source insight 汉字问题的解决方案与函数调用关系图配置

【问题】 Source Insight里输入中文,字间距相当的大。 【答案】 1.Options->Style Properties 2. 在左边Style Name下找到Comment Mu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:”让男友打十万个「对不起」道歉,汉字标上多少遍。如何快速检查中间没有漏?“的坚决方案
举报原因:
原因补充:

(最多只允许输入30个字)