华为秋招2017年8月份笔试(三)

1.3 字母计数法:

某种场景下,开发人员决定使用字母表示一个正整数,该方法利用英文的小写字母表示,映射规则很简单,
 按字母顺序每一个字母都代表一个值,如下所示列表的部分内容:
a 1
b 2
c 3
...
z 26


aa 27
ab 28
...
huawei 104680767
...
函数原型:
Void convertTo26(const char *input,char *output);
/输入参数input为一个ASCII码的字符串。输入字母表示的数最少一位,最多6位,且字母只能使用小写字母,输入十进制不超过32位整数最大值
输入
  ab
输出
   28


public class Main03 {
	//等价于26进制转换
	public static void main(String[] args) {
			Scanner sc=new Scanner(System.in);
			while(sc.hasNext()){
				String str=sc.nextLine();
				String outstr=null;
				convertTo26(str);
			}
	}

	//转化为26进制
	private static void convertTo26(String str) {
			//判断输入的是数字、 还是字母字符串
		if (str.length()<1||str.length()>6) {
			return;
		}
		//判断是字母还是数字
		int sum=0;
		int len=str.length();
		char [] c=str.toCharArray();//转换为数组
		if ( str.charAt(0)>=97 && str.charAt(0)<=122) {//字母
			for (int i = 0; i <c.length; i++) {
				sum+=(c[i]-96)*Math.pow(26, c.length-i-1);
			}
			System.out.println(sum);
		}else if (str.charAt(0)>=48 && str.charAt(0)<=57) {//数字
			int num=Integer.parseInt(str);
			int mod=0;
			List<Integer>list=new ArrayList<>();
			 while(num!=0){
				mod=num%26;
				num=num/26; 
				list.add(mod);//将结果进行保存,需要进行逆序处理
			 }
			Collections.reverse(list);//逆序处理
			
			String result="";
			for (int i = 0; i < list.size(); i++) {
				result+=String.valueOf((char)(list.get(i)+96));
			}
			System.out.println(result);
		}
		
		
	}
}


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值