“a~z”之和

源起?

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

经过

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

image-1610

程序运行截图

分析及实践

  1. 我首先创建了一个char[]数组,然后把a~z放进去[注意:A~Z与a~z所产生的数值是不一样的]
  2. 然后在用循环输出
    1
    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.

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
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来减少垃圾评论。了解我们如何处理您的评论数据