论坛首页 招聘求职论坛

锻炼:把输入的一个自然数以大写方式显示

浏览 4743 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-09-30  

问题:将输入的不超过pow(2,31)-1的整数以大写方式显示

例如:input:123456789 
         output:壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖

 

这种问题还很能锻炼编程基本功,大家来分析一下思路,给出你比较精炼的实现

   发表时间:2008-09-30  
搜狗输入就做了这个功能:v123456789就可以看的
0 请登录后投票
   发表时间:2008-09-30  
每个位数上对应一个单位,应该不算很难的吧
0 请登录后投票
   发表时间:2008-09-30  
发这个版没有不合适吧

..
猛一抬头,发现我发的帖子旁边推荐了相关已经有类似的帖子了
http://www.iteye.com/topic/203097

不过还是有细节上的差异
0 请登录后投票
   发表时间:2008-10-01  
除以10取余数,把余数push到一个stack里,一直递归下去直到商为0,然后从stack 一个个的pop出来,是0就输出"零"......
0 请登录后投票
   发表时间:2008-10-01  
抱歉,看错题目了,还要输出亿千万百万这样的。不过稍微改动一下上面的不难实现,呵呵
0 请登录后投票
   发表时间:2008-10-01  
public class NumberConvertor {
	static final char NUMBER_CHAR[] = new char[] { '零', '壹', '贰', '叁', '肆',
			'伍', '陆', '柒', '捌', '玖' };
	static final char UNIT_CHAR[] = new char[] { '拾', '佰', '仟', '万', '拾', '佰',
			'仟', '亿', '拾', '佰', '仟' };

	public String convert(int number) {
		int remainingNumber = number;
		StringBuffer sb = new StringBuffer();
		int pos = 0;
		int preDigit = -1;
		while (remainingNumber > 0) {
			int digit = remainingNumber % 10;
			if (isUnitToPrint(digit, preDigit, pos)) {
				sb.insert(0, UNIT_CHAR[pos - 1]);
			}
			if (isDigitToPrint(digit, preDigit, pos))
				sb.insert(0, NUMBER_CHAR[digit]);
			pos++;
			preDigit = digit;
			remainingNumber = remainingNumber / 10;
		}
		return sb.toString();
	}

	private boolean isDigitToPrint(int digit, int preDigit, int pos) {
		//个,万,亿的零不输出
		if (digit == 0 && (pos == 0 || pos == 4 || pos == 8)) {
			return false;
		}
		//前后相邻,高位零不输出
		if (digit == 0 && preDigit == 0) {
			return false;
		}
		return true;
	}

	private boolean isUnitToPrint(int digit, int preDigit, int pos) {
		//个位没有单位
		if (pos == 0) {
			return false;
		}
		//万,亿必须输出
		if (pos == 5 || pos == 9) {
			return true;
		}
		//零后不输出单位
		if (digit == 0) {
			return false;
		}
		return true;
	}


}
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics