Android开发:homo计算器

引言

由于众所周知的原因,Homo一词包括在年轻人的群体中广泛传播,本人在看到网上一项目后非常感兴趣,并将其封装成.apk格式的homo calculate应用,可以将不过长的数字转化成114514的数字计算组合,效果如下:

简陋的主界面

简单的计算

用1验证计算正确性

实现过程

一、写Java代码

首先放上大佬的GitHub地址:https://github.com/OxyLite/-_C-
简单对代码进行分析后转译成Java

1、主程序main

实现循环工作,输出fun()生成的结果。

点击查看代码
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            long input = scanner.nextLong();
            System.out.println(input + "=" + fun(input));
            System.out.println();
        }
    }

2、核心函数fun()

分成两部分,数据表和算法
算法部分:
首先代码定义了一个字符串sum和一个整型数组a,sum用于存储生成的数学表达式,而a包含了一系列预定义的数字,这些数字在后续的计算中会被用到。接下来代码检查num的值。如果num小于0,那么函数会进行嵌套操作,返回一个表示num是-1和num的绝对值乘积的字符串。如果num小于10000,函数会定义一个长整型变量temp1和一个标志变量flag,temp1从num-1开始递减直到0,对于每一个temp1,它会在数组a中查找是否存在这个值,数组a包含了一系列预定义的数字。如果在数组a中找到了temp1,那么flag被设置为1,break。然后函数会构造一个字符串sum,这个字符串表示num是temp1和num-temp1的和,这个字符串通过调用fun函数两次并将结果用加号连接起来得到。这里的fun函数是递归调用的,它会继续分解temp1和num-temp1,直到它们不能再分解为止。如果num在10000和229028之间,函数会生成一个在num的平方根的上下界之间的随机数temp,然后返回一个字符串,该字符串表示num是temp和num除以temp的余数m的乘积和和。 如果num大于229028,函数会将num分解为若干个229028的乘积和一个余数,然后返回一个字符串,该字符串表示这个乘积和余数的和。然后进行同小于10000的操作,代码如下:

点击查看代码
    static String fun(long num) {
        String sum = "";
        int[] a={229028,114514,58596,49654,45804,23256,22616,19844,16030,14515,14514,14513,11455,11447,9028,8976,7980,7710,7197,7196,7195,6930,6682,6270,5818,5810,5808,5805,5804,5803,5800,5725,5698,5610,5358,5005,4965,4957,4917,4584,4580,4576,4525,4516,4515,4514,4513,4512,4503,4112,3608,3598,3435,3080,3060,2857,2856,2855,2850,2736,2652,2570,2475,2420,2280,2248,2240,2166,2068,2067,2058,2057,2056,2055,2054,2045,2044,2031,2030,2029,2024,2016,1980,1936,1848,1824,1815,1808,1806,1805,1804,1803,1802,1800,1793,1760,1710,1666,1632,1542,1526,1485,1456,1455,1454,1448,1447,1446,1428,1386,1260,1159,1150,1149,1148,1142,1141,1140,1131,1100,1056,1050,1036,1026,1020,981,980,979,910,906,898,894,880,836,827,825,818,817,816,815,814,805,784,771,770,769,761,730,726,725,724,720,719,718,717,715,711,710,709,705,704,688,680,667,660,659,658,657,649,644,641,632,631,630,629,628,619,616,612,611,609,601,595,584,581,580,579,576,575,574,573,567,566,565,561,560,558,556,545,529,528,527,522,521,520,519,518,517,516,514,513,512,511,510,509,508,507,506,502,501,500,499,498,495,492,491,490,488,481,480,476,470,466,460,458,457,456,455,454,453,452,450,449,448,447,446,445,444,440,438,436,435,434,432,412,404,400,396,385,376,375,368,363,361,360,357,353,352,351,350,349,341,337,336,335,329,327,325,318,312,300,297,291,286,285,282,281,280,279,278,275,270,269,268,267,266,265,260,259,257,252,251,248,247,240,236,235,234,231,230,229,227,226,225,224,223,222,221,220,219,218,217,216,215,214,212,211,210,209,208,207,206,204,202,201,200,199,198,197,196,195,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,172,171,170,169,168,165,161,160,159,158,157,154,152,151,150,149,148,147,146,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,118,117,116,115,114,113,112,111,110,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1};
        if(num<0)
        {
            sum="("+fun(-1)+")*("+fun((-1)*num)+")";
            return sum;
        }

        long temp,div,m;

        if(num<10000)
        {
            long temp1;
            int flag=0;
            for(temp1=num-1;temp1>0;temp1--)
            {
                for(int j=0;j<521;j++)
                {
                    if(a[j]==temp1)
                    {
                        flag=1;
                        break;
                    }
                }
                if(flag==1) break;
            }
            sum="("+fun(temp1)+")+("+fun(num-temp1)+")";
        }
        else if(num < 229028) { //10001~229028
            Random rand = new Random();
            int lowerBound = (int)Math.sqrt(num) - 100;
            int upperBound = (int)Math.sqrt(num);
            temp = rand.nextInt(upperBound - lowerBound + 1) + lowerBound;
            div = num / temp;
            m = num % temp;
            if(div != 1) {
                sum = "(" + fun(div) + ")*(" + fun(temp) + ")";
            } else {
                sum = "(" + fun(temp) + ")";
            }
            if(m != 0) {
                sum += "+(" + fun(m) + ")";
            }
        }
        else
        {
            long total=0,temp2=num;
            while(temp2>229028)
            {
                temp2/=229028;
                total++;
                sum+="("+fun(229028)+")*";
            }
            temp2= (long) (num/pow(229028,total));
            if(temp2!=1) sum+=fun(temp2);
            else sum = sum.substring(0, sum.length() - 1);
            if(num!=temp2*pow(229028,total)) sum+="+("+fun((long) (num-temp2*pow(229028,total)))+")";
        }

        return sum;
    }

数据表如下:

点击查看代码
        if(num==229028) return "114514+114514";
        if(num==114514) return "114514";
        if(num==58596) return "114*514";
        if(num==49654) return "11*4514";
        if(num==45804) return "11451*4";
        if(num==23256) return "114*51*4";
        if(num==22616) return "11*4*514";
        if(num==19844) return "11*451*4";
        if(num==16030) return "1145*14";
        if(num==14515) return "1+14514";
        if(num==14514) return "1*14514";
        if(num==14513) return "-1+14514";
        if(num==11455) return "11451+4";
        if(num==11447) return "11451-4";
        if(num==9028) return "(1+1)*4514";
        if(num==8976) return "11*4*51*4";
        if(num==7980) return "114*5*14";
        if(num==7710) return "(1+14)*514";
        if(num==7197) return "1+14*514";
        if(num==7196) return "1*14*514";
        if(num==7195) return "-1+14*514";
        if(num==6930) return "11*45*14";
        if(num==6682) return "(1-14)*-514";
        if(num==6270) return "114*(51+4)";
        if(num==5818) return "114*51+4";
        if(num==5810) return "114*51-4";
        if(num==5808) return "(1+1451)*4";
        if(num==5805) return "1+1451*4";
        if(num==5804) return "1*1451*4";
        if(num==5803) return "-1+1451*4";
        if(num==5800) return "(1-1451)*-4";
        if(num==5725) return "1145*(1+4)";
        if(num==5698) return "11*(4+514)";
        if(num==5610) return "-11*(4-514)";
        if(num==5358) return "114*(51-4)";
        if(num==5005) return "11*(451+4)";
        if(num==4965) return "11*451+4";
        if(num==4957) return "11*451-4";
        if(num==4917) return "11*(451-4)";
        if(num==4584) return "(1145+1)*4";
        if(num==4580) return "1145*1*4";
        if(num==4576) return "(1145-1)*4";
        if(num==4525) return "11+4514";
        if(num==4516) return "1+1+4514";
        if(num==4515) return "1+1*4514";
        if(num==4514) return "1-1+4514";
        if(num==4513) return "-1*1+4514";
        if(num==4512) return "-1-1+4514";
        if(num==4503) return "-11+4514";
        if(num==4112) return "(1+1)*4*514";
        if(num==3608) return "(1+1)*451*4";
        if(num==3598) return "(11-4)*514";
        if(num==3435) return "-1145*(1-4)";
        if(num==3080) return "11*4*5*14";
        if(num==3060) return "(11+4)*51*4";
        if(num==2857) return "1+14*51*4";
        if(num==2856) return "1*14*51*4";
        if(num==2855) return "-1+14*51*4";
        if(num==2850) return "114*5*(1+4)";
        if(num==2736) return "114*(5+1)*4";
        if(num==2652) return "(1-14)*51*-4";
        if(num==2570) return "1*(1+4)*514";
        if(num==2475) return "11*45*(1+4)";
        if(num==2420) return "11*4*(51+4)";
        if(num==2280) return "114*5*1*4";
        if(num==2248) return "11*4*51+4";
        if(num==2240) return "11*4*51-4";
        if(num==2166) return "114*(5+14)";
        if(num==2068) return "11*4*(51-4)";
        if(num==2067) return "11+4*514";
        if(num==2058) return "1+1+4*514";
        if(num==2057) return "1/1+4*514";
        if(num==2056) return "1/1*4*514";
        if(num==2055) return "-1/1+4*514";
        if(num==2054) return "-1-1+4*514";
        if(num==2045) return "-11+4*514";
        if(num==2044) return "(1+145)*14";
        if(num==2031) return "1+145*14";
        if(num==2030) return "1*145*14";
        if(num==2029) return "-1+145*14";
        if(num==2024) return "11*(45+1)*4";
        if(num==2016) return "-(1-145)*14";
        if(num==1980) return "11*45*1*4";
        if(num==1936) return "11*(45-1)*4";
        if(num==1848) return "(11+451)*4";
        if(num==1824) return "114*(5-1)*4";
        if(num==1815) return "11+451*4";
        if(num==1808) return "1*(1+451)*4";
        if(num==1806) return "1+1+451*4";
        if(num==1805) return "1+1*451*4";
        if(num==1804) return "1-1+451*4";
        if(num==1803) return "1*-1+451*4";
        if(num==1802) return "-1-1+451*4";
        if(num==1800) return "1*-(1-451)*4";
        if(num==1793) return "-11+451*4";
        if(num==1760) return "-(11-451)*4";
        if(num==1710) return "114*-5*(1-4)";
        if(num==1666) return "(114+5)*14";
        if(num==1632) return "(1+1)*4*51*4";
        if(num==1542) return "1*-(1-4)*514";
        if(num==1526) return "(114-5)*14";
        if(num==1485) return "11*-45*(1-4)";
        if(num==1456) return "1+1451+4";
        if(num==1455) return "1*1451+4";
        if(num==1454) return "-1+1451+4";
        if(num==1448) return "1+1451-4";
        if(num==1447) return "1*1451-4";
        if(num==1446) return "-1+1451-4";
        if(num==1428) return "(11-4)*51*4";
        if(num==1386) return "11*(4+5)*14";
        if(num==1260) return "(1+1)*45*14";
        if(num==1159) return "1145+14";
        if(num==1150) return "1145+1+4";
        if(num==1149) return "1145+1*4";
        if(num==1148) return "1145-1+4";
        if(num==1142) return "1145+1-4";
        if(num==1141) return "1145-1*4";
        if(num==1140) return "(1145-1)-4";
        if(num==1131) return "1145-14";
        if(num==1100) return "11*4*5*(1+4)";
        if(num==1056) return "11*4*(5+1)*4";
        if(num==1050) return "(11+4)*5*14";
        if(num==1036) return "(1+1)*(4+514)";
        if(num==1026) return "114*-(5-14)";
        if(num==1020) return "1*(1+4)*51*4";
        if(num==981) return "1+14*5*14";
        if(num==980) return "1*14*5*14";
        if(num==979) return "-1+14*5*14";
        if(num==910) return "-(1-14)*5*14";
        if(num==906) return "(1+1)*451+4";
        if(num==898) return "(1+1)*451-4";
        if(num==894) return "(1+1)*(451-4)";
        if(num==880) return "11*4*5*1*4";
        if(num==836) return "11*4*(5+14)";
        if(num==827) return "11+4*51*4";
        if(num==825) return "(11+4)*(51+4)";
        if(num==818) return "1+1+4*51*4";
        if(num==817) return "1*1+4*51*4";
        if(num==816) return "1*1*4*51*4";
        if(num==815) return "-1+1*4*51*4";
        if(num==814) return "-1-1+4*51*4";
        if(num==805) return "-11+4*51*4";
        if(num==784) return "(11+45)*14";
        if(num==771) return "1+14*(51+4)";
        if(num==770) return "1*14*(51+4)";
        if(num==769) return "(11+4)*51+4";
        if(num==761) return "(1+14)*51-4";
        if(num==730) return "(1+145)*(1+4)";
        if(num==726) return "1+145*(1+4)";
        if(num==725) return "1*145*(1+4)";
        if(num==724) return "-1-145*-(1+4)";
        if(num==720) return "(1-145)*-(1+4)";
        if(num==719) return "1+14*51+4";
        if(num==718) return "1*14*51+4";
        if(num==717) return "-1-14*-51+4";
        if(num==715) return "(1-14)*-(51+4)";
        if(num==711) return "1+14*51-4";
        if(num==710) return "1*14*51-4";
        if(num==709) return "-1+14*51-4";
        if(num==705) return "(1+14)*(51-4)";
        if(num==704) return "11*4*(5-1)*4";
        if(num==688) return "114*(5+1)+4";
        if(num==680) return "114*(5+1)-4";
        if(num==667) return "-(1-14)*51+4";
        if(num==660) return "(114+51)*4";
        if(num==659) return "1+14*(51-4)";
        if(num==658) return "1*14*(51-4)";
        if(num==657) return "-1+14*(51-4)";
        if(num==649) return "11*(45+14)";
        if(num==644) return "1*(1+45)*14";
        if(num==641) return "11+45*14";
        if(num==632) return "1+1+45*14";
        if(num==631) return "1*1+45*14";
        if(num==630) return "1*1*45*14";
        if(num==629) return "1*-1+45*14";
        if(num==628) return "114+514";
        if(num==619) return "-11+45*14";
        if(num==616) return "1*-(1-45)*14";
        if(num==612) return "-1*(1-4)*51*4";
        if(num==611) return "(1-14)*-(51-4)";
        if(num==609) return "11*(4+51)+4";
        if(num==601) return "11*(4+51)-4";
        if(num==595) return "(114+5)*(1+4)";
        if(num==584) return "114*5+14";
        if(num==581) return "1+145*1*4";
        if(num==580) return "1*145/1*4";
        if(num==579) return "-1+145*1*4";
        if(num==576) return "1*(145-1)*4";
        if(num==575) return "114*5+1+4";
        if(num==574) return "114*5/1+4";
        if(num==573) return "114*5-1+4";
        if(num==567) return "114*5+1-4";
        if(num==566) return "114*5*1-4";
        if(num==565) return "114*5-1-4";
        if(num==561) return "11/4*51*4";
        if(num==560) return "(1+1)*4*5*14";
        if(num==558) return "11*4+514";
        if(num==556) return "114*5-14";
        if(num==545) return "(114-5)*(1+4)";
        if(num==529) return "1+14+514";
        if(num==528) return "1*14+514";
        if(num==527) return "-1+14+514";
        if(num==522) return "(1+1)*4+514";
        if(num==521) return "11-4+514";
        if(num==520) return "1+1+4+514";
        if(num==519) return "1+1*4+514";
        if(num==518) return "1-1+4+514";
        if(num==517) return "-1+1*4+514";
        if(num==516) return "-1-1+4+514";
        if(num==514) return "(1-1)/4+514";
        if(num==513) return "-11*(4-51)-4";
        if(num==512) return "1+1-4+514";
        if(num==511) return "1*1-4+514";
        if(num==510) return "1-1-4+514";
        if(num==509) return "11*45+14";
        if(num==508) return "-1-1-4+514";
        if(num==507) return "-11+4+514";
        if(num==506) return "-(1+1)*4+514";
        if(num==502) return "11*(45+1)-4";
        if(num==501) return "1-14+514";
        if(num==500) return "11*45+1+4";
        if(num==499) return "11*45*1+4";
        if(num==498) return "11*45-1+4";
        if(num==495) return "11*(4+5)*(1+4)";
        if(num==492) return "11*45+1-4";
        if(num==491) return "11*45-1*4";
        if(num==490) return "11*45-1-4";
        if(num==488) return "11*(45-1)+4";
        if(num==481) return "11*45-14";
        if(num==480) return "11*(45-1)-4";
        if(num==476) return "(114+5)/1*4";
        if(num==470) return "-11*4+514";
        if(num==466) return "11+451+4";
        if(num==460) return "114*(5-1)+4";
        if(num==458) return "11+451-4";
        if(num==457) return "1+1+451+4";
        if(num==456) return "1*1+451+4";
        if(num==455) return "1-1+451+4";
        if(num==454) return "-1+1*451+4";
        if(num==453) return "-1-1+451+4";
        if(num==452) return "114*(5-1)-4";
        if(num==450) return "(1+1)*45*(1+4)";
        if(num==449) return "1+1+451-4";
        if(num==448) return "1+1*451-4";
        if(num==447) return "1/1*451-4";
        if(num==446) return "1*-1+451-4";
        if(num==445) return "-1-1+451-4";
        if(num==444) return "-11+451+4";
        if(num==440) return "(1+1)*4*(51+4)";
        if(num==438) return "(1+145)*-(1-4)";
        if(num==436) return "-11+451-4";
        if(num==435) return "-1*145*(1-4)";
        if(num==434) return "-1-145*(1-4)";
        if(num==432) return "(1-145)*(1-4)";
        if(num==412) return "(1+1)*4*51+4";
        if(num==404) return "(1+1)*4*51-4";
        if(num==400) return "-114+514";
        if(num==396) return "11*4*-(5-14)";
        if(num==385) return "(11-4)*(51+4)";
        if(num==376) return "(1+1)*4*(51-4)";
        if(num==375) return "(1+14)*5*(1+4)";
        if(num==368) return "(1+1)*(45+1)*4";
        if(num==363) return "(1+1451)/4";
        if(num==361) return "(11-4)*51+4";
        if(num==360) return "(1+1)*45*1*4";
        if(num==357) return "(114+5)*-(1-4)";
        if(num==353) return "(11-4)*51-4";
        if(num==352) return "(1+1)*(45-1)*4";
        if(num==351) return "1+14*-5*-(1+4)";
        if(num==350) return "1*(1+4)*5*14";
        if(num==349) return "-1+14*5*(1+4)";
        if(num==341) return "11*(45-14)";
        if(num==337) return "1-14*-(5+1)*4";
        if(num==336) return "1*14*(5+1)*4";
        if(num==335) return "-1+14*(5+1)*4";
        if(num==329) return "(11-4)*(51-4)";
        if(num==327) return "-(114-5)*(1-4)";
        if(num==325) return "-(1-14)*5*(1+4)";
        if(num==318) return "114+51*4";
        if(num==312) return "(1-14)*-(5+1)*4";
        if(num==300) return "(11+4)*5/1*4";
        if(num==297) return "-11*(4+5)*(1-4)";
        if(num==291) return "11+4*5*14";
        if(num==286) return "(1145-1)/4";
        if(num==285) return "(11+4)*(5+14)";
        if(num==282) return "1+1+4*5*14";
        if(num==281) return "1+14*5/1*4";
        if(num==280) return "1-1+4*5*14";
        if(num==279) return "1*-1+4*5*14";
        if(num==278) return "-1-1+4*5*14";
        if(num==275) return "1*(1+4)*(51+4)";
        if(num==270) return "(1+1)*45*-(1-4)";
        if(num==269) return "-11+4*5*14";
        if(num==268) return "11*4*(5+1)+4";
        if(num==267) return "1+14*(5+14)";
        if(num==266) return "1*14*(5+14)";
        if(num==265) return "-1+14*(5+14)";
        if(num==260) return "1*(14+51)*4";
        if(num==259) return "1*(1+4)*51+4";
        if(num==257) return "(1+1)/4*514";
        if(num==252) return "(114-51)*4";
        if(num==251) return "1*-(1+4)*-51-4";
        if(num==248) return "11*4+51*4";
        if(num==247) return "-(1-14)*(5+14)";
        if(num==240) return "(11+4)*(5-1)*4";
        if(num==236) return "11+45*(1+4)";
        if(num==235) return "1*(1+4)*(51-4)";
        if(num==234) return "11*4*5+14";
        if(num==231) return "11+4*(51+4)";
        if(num==230) return "1*(1+45)*(1+4)";
        if(num==229) return "1145/(1+4)";
        if(num==227) return "1+1+45*(1+4)";
        if(num==226) return "1*1+45*(1+4)";
        if(num==225) return "11*4*5+1+4";
        if(num==224) return "11*4*5/1+4";
        if(num==223) return "11*4*5-1+4";
        if(num==222) return "1+1+4*(51+4)";
        if(num==221) return "1/1+4*(51+4)";
        if(num==220) return "1*1*(4+51)*4";
        if(num==219) return "1+14+51*4";
        if(num==218) return "1*14+51*4";
        if(num==217) return "11*4*5+1-4";
        if(num==216) return "11*4*5-1*4";
        if(num==215) return "11*4*5-1-4";
        if(num==214) return "-11+45*(1+4)";
        if(num==212) return "(1+1)*4+51*4";
        if(num==211) return "11-4+51*4";
        if(num==210) return "1+1+4+51*4";
        if(num==209) return "1+1*4*51+4";
        if(num==208) return "1*1*4+51*4";
        if(num==207) return "-1+1*4*51+4";
        if(num==206) return "11*4*5-14";
        if(num==204) return "(1-1)/4+51*4";
        if(num==202) return "1+1-4+51*4";
        if(num==201) return "1/1-4+51*4";
        if(num==200) return "1/1*4*51-4";
        if(num==199) return "1*-1+4*51-4";
        if(num==198) return "-1-1+4*51-4";
        if(num==197) return "-11+4+51*4";
        if(num==196) return "-(1+1)*4+51*4";
        if(num==195) return "(1-14)*5*(1-4)";
        if(num==192) return "(1+1)*4*(5+1)*4";
        if(num==191) return "1-14+51*4";
        if(num==190) return "1*-14+51*4";
        if(num==189) return "-11-4+51*4";
        if(num==188) return "1-1-(4-51)*4";
        if(num==187) return "1/-1+4*(51-4)";
        if(num==186) return "1+1+(45+1)*4";
        if(num==185) return "1-1*-(45+1)*4";
        if(num==184) return "114+5*14";
        if(num==183) return "-1+1*(45+1)*4";
        if(num==182) return "1+1+45/1*4";
        if(num==181) return "1+1*45*1*4";
        if(num==180) return "1*1*45*1*4";
        if(num==179) return "-1/1+45*1*4";
        if(num==178) return "-1-1+45*1*4";
        if(num==177) return "1+1*(45-1)*4";
        if(num==176) return "1*1*(45-1)*4";
        if(num==175) return "-1+1*(45-1)*4";
        if(num==174) return "-1-1+(45-1)*4";
        if(num==172) return "11*4*(5-1)-4";
        if(num==171) return "114*(5+1)/4";
        if(num==170) return "(11-45)*-(1+4)";
        if(num==169) return "114+51+4";
        if(num==168) return "(11+45)*-(1-4)";
        if(num==165) return "11*-45/(1-4)";
        if(num==161) return "114+51-4";
        if(num==160) return "1+145+14";
        if(num==159) return "1*145+14";
        if(num==158) return "-1+145+14";
        if(num==157) return "1*(1-4)*-51+4";
        if(num==154) return "11*(4-5)*-14";
        if(num==152) return "(1+1)*4*(5+14)";
        if(num==151) return "1+145+1+4";
        if(num==150) return "1+145*1+4";
        if(num==149) return "1*145*1+4";
        if(num==148) return "1*145-1+4";
        if(num==147) return "-1+145-1+4";
        if(num==146) return "11+45*-(1-4)";
        if(num==143) return "1+145+1-4";
        if(num==142) return "1+145*1-4";
        if(num==141) return "1+145-1-4";
        if(num==140) return "1*145-1-4";
        if(num==139) return "-1+145-1-4";
        if(num==138) return "-1*(1+45)*(1-4)";
        if(num==137) return "1+1-45*(1-4)";
        if(num==136) return "1*1-45*(1-4)";
        if(num==135) return "-1/1*45*(1-4)";
        if(num==134) return "114+5/1*4";
        if(num==133) return "114+5+14";
        if(num==132) return "1+145-14";
        if(num==131) return "1*145-14";
        if(num==130) return "-1+145-14";
        if(num==129) return "114+5*-(1-4)";
        if(num==128) return "1+1+(4+5)*14";
        if(num==127) return "1-14*(5-14)";
        if(num==126) return "1*(14-5)*14";
        if(num==125) return "-1-14*(5-14)";
        if(num==124) return "114+5+1+4";
        if(num==123) return "114-5+14";
        if(num==122) return "114+5-1+4";
        if(num==121) return "11*(45-1)/4";
        if(num==120) return "-(1+1)*4*5*(1-4)";
        if(num==118) return "(1+1)*(45+14)";
        if(num==117) return "(1-14)*(5-14)";
        if(num==116) return "114+5+1-4";
        if(num==115) return "114+5*1-4";
        if(num==114) return "11*4+5*14";
        if(num==113) return "114-5/1+4";
        if(num==112) return "114-5-1+4";
        if(num==111) return "11+4*5*(1+4)";
        if(num==110) return "-(11-451)/4";
        if(num==107) return "11-4*-(5+1)*4";
        if(num==106) return "114-5+1-4";
        if(num==105) return "114+5-14";
        if(num==104) return "114-5-1-4";
        if(num==103) return "11*(4+5)+1*4";
        if(num==102) return "11*(4+5)-1+4";
        if(num==101) return "1+1*4*5*(1+4)";
        if(num==100) return "1*(1+4)*5*1*4";
        if(num==99) return "11*4+51+4";
        if(num==98) return "1+1+4*(5+1)*4";
        if(num==97) return "1+1*4*(5+1)*4";
        if(num==96) return "11*(4+5)+1-4";
        if(num==95) return "114-5-14";
        if(num==94) return "114-5/1*4";
        if(num==93) return "(1+1)*45-1+4";
        if(num==92) return "(1+1)*(45-1)+4";
        if(num==91) return "11*4+51-4";
        if(num==90) return "-114+51*4";
        if(num==89) return "(1+14)*5+14";
        if(num==88) return "1*14*(5+1)+4";
        if(num==87) return "11+4*(5+14)";
        if(num==86) return "(1+1)*45*1-4";
        if(num==85) return "1+14+5*14";
        if(num==84) return "1*14+5*14";
        if(num==83) return "-1+14+5*14";
        if(num==82) return "1+1+4*5/1*4";
        if(num==81) return "1/1+4*5*1*4";
        if(num==80) return "1-1+4*5*1*4";
        if(num==79) return "1*-1+4*5/1*4";
        if(num==78) return "(1+1)*4+5*14";
        if(num==77) return "11-4+5*14";
        if(num==76) return "1+1+4+5*14";
        if(num==75) return "1+14*5*1+4";
        if(num==74) return "1/1*4+5*14";
        if(num==73) return "1*14*5-1+4";
        if(num==72) return "-1-1+4+5*14";
        if(num==71) return "(1+14)*5-1*4";
        if(num==70) return "11+45+14";
        if(num==69) return "1*14+51+4";
        if(num==68) return "1+1-4+5*14";
        if(num==67) return "1-1*4+5*14";
        if(num==66) return "1*14*5-1*4";
        if(num==65) return "1*14*5-1-4";
        if(num==64) return "11*4+5*1*4";
        if(num==63) return "11*4+5+14";
        if(num==62) return "1+14+51-4";
        if(num==61) return "1+1+45+14";
        if(num==60) return "11+45*1+4";
        if(num==59) return "114-51-4";
        if(num==58) return "-1+1*45+14";
        if(num==57) return "1+14*5-14";
        if(num==56) return "1*14*5-14";
        if(num==55) return "-1+14*5-14";
        if(num==54) return "11-4+51-4";
        if(num==53) return "11+45+1-4";
        if(num==52) return "11+45/1-4";
        if(num==51) return "11+45-1-4";
        if(num==50) return "1+1*45/1+4";
        if(num==49) return "1*1*45/1+4";
        if(num==48) return "-11+45+14";
        if(num==47) return "1/-1+45-1+4";
        if(num==46) return "11*4+5+1-4";
        if(num==45) return "11+4*5+14";
        if(num==44) return "114-5*14";
        if(num==43) return "1+1*45+1-4";
        if(num==42) return "11+45-14";
        if(num==41) return "1/1*45*1-4";
        if(num==40) return "-11+4*51/4";
        if(num==39) return "-11+45+1+4";
        if(num==38) return "-11+45*1+4";
        if(num==37) return "-11+45-1+4";
        if(num==36) return "11+4*5+1+4";
        if(num==35) return "11*4+5-14";
        if(num==34) return "1-14+51-4";
        if(num==33) return "1+1+45-14";
        if(num==32) return "1*1+45-14";
        if(num==31) return "1/1*45-14";
        if(num==30) return "1*-1+45-14";
        if(num==29) return "-11+45-1-4";
        if(num==28) return "11+4*5+1-4";
        if(num==27) return "11+4*5/1-4";
        if(num==26) return "11-4+5+14";
        if(num==25) return "11*4-5-14";
        if(num==24) return "1+14-5+14";
        if(num==23) return "1*14-5+14";
        if(num==22) return "1*14+5-1+4";
        if(num==21) return "-1-1+4+5+14";
        if(num==20) return "-11+45-14";
        if(num==19) return "1+1+4*5+1-4";
        if(num==18) return "1+1+4*5*1-4";
        if(num==17) return "11+4*5-14";
        if(num==16) return "11-4-5+14";
        if(num==15) return "1+14-5+1+4";
        if(num==14) return "11+4-5/1+4";
        if(num==13) return "1*14-5/1+4";
        if(num==12) return "-11+4+5+14";
        if(num==11) return "11*-4+51+4";
        if(num==10) return "-11/4+51/4";
        if(num==9) return "11-4+5+1-4";
        if(num==8) return "11-4+5/1-4";
        if(num==7) return "11-4+5-1-4";
        if(num==6) return "1-14+5+14";
        if(num==5) return "11-4*5+14";
        if(num==4) return "-11-4+5+14";
        if(num==3) return "11*-4+51-4";
        if(num==2) return "-11+4-5+14";
        if(num==1) return "11/(45-1)*4";
        if(num==0) return "(1-1)*4514";
        if(num==-1) return "11-4-5+1-4";

3、随机数函数:

fun()函数的主要目的是将一个给定的数字num分解为一系列的数学表达式。在这个函数中,随机数的使用主要出现在处理num大于10000且小于229028的情况。 在这种情况下,函数首先计算出num的平方根的上下界,然后生成一个在这个范围内的随机数temp。接着,num被temp除,得到的商div和余数m被用来构造数学表达式。所以需要一个随机数生成函数。

点击查看代码
static int random(int num1, int num2) {
        Random rand = new Random();
        int num3= rand.nextInt(num2 - num1 + 1);
        return num3+num1;
    }

二、Android studio,启动

1、进行基础配置

新建一个empty activity,简单配置即可,不做介绍

2、界面布局

配置activity_main.xml,丑陋代码如下:

点击查看代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="100dp"
        android:text="Homo Calculate"
        android:textSize="36sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/numberInput"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <EditText
        android:id="@+id/numberInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入一个数字让它变的homo"
        android:gravity="center"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.49"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.386" />

    <Button
        android:id="@+id/calculateButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:layout_marginEnd="148dp"
        android:text="Calculate"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/numberInput" />

    <TextView
        android:id="@+id/resultView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="64dp"
        android:text=""
        android:textSize="24sp"
        android:paddingLeft="50dp"
        android:paddingRight="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/calculateButton" />

</androidx.constraintlayout.widget.ConstraintLayout>

3、设置主活动

编辑MainActivity.java,代码如下:

点击查看代码
package com.example.homocalculate;

import static java.lang.Math.pow;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText numberInput = findViewById(R.id.numberInput);
        Button calculateButton = findViewById(R.id.calculateButton);
        final TextView resultView = findViewById(R.id.resultView);

        calculateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String numberStr = numberInput.getText().toString();
                long number = Long.parseLong(numberStr);
                String result = fun(number);
                resultView.setText(number + "=\n" + result);
            }
        });
    }
然后添加对应的函数即可

4、启动

能启动,大胜利

结语

最后也是生成了.apk安装包,可供安卓人体验

感谢观看力

posted @ 2024-03-13 09:42  爱莉希雅ovo  阅读(40)  评论(0编辑  收藏  举报