“a~z”之和

源起?

看到题目,你也许会觉得奇怪。但在java里却是可以的(其他编程语言不知道),下面就看看如何计算的把。

经过

这是一个有趣的发现,源于我看到一本书上:char类型的a~z(区分大小写)
可以自动提升成int类型,获得其对应的ASCII值.
于是对此进行了加,减,乘,除.
大写的A~Z和小写的a~z产生的ASCII值不一样,但是是连贯的.

image-1610

程序运行截图

分析及实践

  1. 我首先创建了一个char[]数组,然后把a~z放进去[注意:A~Z与a~z所产生的数值是不一样的]
  2. 然后在用循环输出
    System.out.print(SkTest[i] + 0 + " ");
  3. 利用+0是为了让其转换为int类型
  4. a~z所对应的int数值是:97~122,A~Z所对应的int数值是:65~90
  5. 然后再将上面的数字进行计算就可以获得其加,减,乘,除的结果了.
  6. 下面是我计算的结果:
  7. a~z:加:2847;减:14;乘[数值超过Long最大值,不精确]:6982962423800004608;除:1.
  8. A~Z:加:2015;减:14;乘[数值超过Long最大值,不精确]:7430394426012205056;除:1.

源代码

import java.util.Scanner;

/**
* A~Z运算
*
* @author Ruidong_pu
* @version 2012.10.4
*/
public class TestTop {

Scanner sc = new Scanner(System.in);
private int menuchoose;

public void show() {// 输出.
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println("这是一个有趣的发现,源于我看到一本书上:char类型的a~z(区分大小写)");
System.out.println("可以自动提升成int类型,获得其对应的ASCII值.");
System.out.println("于是对此进行了加,减,乘,除.");
System.out.println("大写的A~Z和小写的a~z产生的ASCII值不一样,但是是连贯的.");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>");

do {
System.out.println("选择:1.小写;2.大写;3.退出.");
try{
menuchoose = sc.nextInt();
}catch(Exception e){
System.out.println("请确认输入的是数字!");
}

switch (menuchoose) {
case 1:
Lowercasetest();// 小写
break;
case 2:
Capitalletterstest();// 大写
break;
case 3:
System.out.println("程序退出,谢谢使用!");
System.exit(0);
}
} while (true);

}

public void Capitalletterstest() { // 大写字母测试
/*
* 其中A~Z自动提升到int类型.变成其对应的ASCII值. 然后即可进行运算,a~z分别对应的ASCII值范围为:65~90.
* 其相加的和为:2015. 其相乘的和超出Long的最大值,因此出现了负数.
*/
System.out.println("A~Z自动转换成的数字:");
char[] SkTest = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z' };
for (int i = 0; i < SkTest.length; i++) { // 输出int类型的数字 System.out.print(SkTest[i] + 0 + " "); } do { System.out.println("\r1.加;2.减;3.乘;4.除;5.退出"); try { menuchoose = sc.nextInt(); } catch (Exception e) { System.out.println("输入貌似出错了哦!~~囧"); } switch (menuchoose) { case 1: System.out.println("下面是和:>>>>>>>>>>>>>>>>>>>>>>");
add(65, 90);// 调用+方法
break;
case 2:
System.out.println("下面是差:>>>>>>>>>>>>>>>>>>>>>>");
minus(65, 91);
break;
case 3:
System.out
.println("下面是积【已经损失精度,积大于Long的最大长度】:>>>>>>>>>>>>>>>>>>>>>>");
ride(65, 91);
break;
case 4:
System.out.println("下面是商:>>>>>>>>>>>>>>>>>>>>>>");
divide(65, 91);
break;
case 5:
show();
}
} while (true);
}

public void Lowercasetest() {// 小写字母测试.
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
/*
* 其中a~z自动提升到int类型.变成其对应的ASCII值. 然后即可进行运算,a~z分别对应的ASCII值范围为:97~122.
* 其相加的和为:2847. 其相乘的和超出Long的最大值,因此出现了负数.
*/
char[] sk = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z' };
//
System.out.println("a~z自动转换成的数字:");
for (int i = 0; i < sk.length; i++) { System.out.print(sk[i] + 0 + " "); } do { System.out.println("\r1.加;2.减;3.乘;4.除;5.退出"); try { menuchoose = sc.nextInt(); } catch (Exception e) { System.out.println("输入貌似出错了哦!~~囧"); } switch (menuchoose) { case 1: System.out.println("下面是和:>>>>>>>>>>>>>>>>>>>>>>");
add(97, 122);// 调用+方法
break;
case 2:
System.out.println("下面是差:>>>>>>>>>>>>>>>>>>>>>>");
minus(97, 123);// 第二个数+1.因为在minus方法中的for循环为i<第二个数,因此第二个数需+1处理. break; case 3: /* * 下面是97~122的数相乘 已超出Long的最大值,故已经损失精度. 相乘的结果为:6982962423800004608 * >>>Long的最大值为:9223372036854775807
* >>>相减的结果为:14.(97-1...98-96...99-92......)
*/
System.out
.println("下面是积<已经损失精度,积大于Long的最大长度>:>>>>>>>>>>>>>>>>>>>>>>");
ride(97, 123);// 第二个数+1.因为在minus方法中的for循环为i<第二个数,因此第二个数需+1处理. break; case 4: System.out.println("下面是商:>>>>>>>>>>>>>>>>>>>>>>");
divide(97, 123);// 第二个数+1.因为在minus方法中的for循环为i<第二个数,因此第二个数需+1处理. break; case 5: show(); } } while (true); } // 相加 public int add(int MinNum, int MaxNum) { int num = (MinNum + MaxNum) * 26 / 2; System.out.println(num); return num; } // 相减 public long minus(int MinNum, int MaxNum) { long num = 1L; for (int t = MinNum; t < MaxNum; t++) { num = Long.valueOf(t) - num; } System.out.println(num); return num; } // 相乘 public long ride(int MinNum, int MaxNum) { long num = 1L; for (int t = MinNum; t < MaxNum; t++) { num = Long.valueOf(t) * num; } System.out.println(num); return num; } // 相除 public long divide(int MinNum, int MaxNum) { long num = 1L; for (int t = MinNum; t < MaxNum; t++) { num = Long.valueOf(t) / num; } System.out.println(num); return num; } public static void main(String[] args) { // TODO Auto-generated method stub TestTop ts = new TestTop(); ts.show(); } }

《“a~z”之和》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据