要求生成17位数的字符串可以是字符也可以是整型,按如下公式求和
  sum:=8*n[0]+7*n[1]+6*n[2]+5*n[3]+4*n[4]+3*n[5]+2*n[6]+10*n[7]+0*n[8]+9*n[9]+8*n[10]+7*n[11]+6*n[12]+5*n[13]+4*n[14]+3*n[15]+2*n[16];
其中n[0]表示字符串第一位,n[2]表示字符串第3位.
  求得的和sum对11取余数,得到的余数y必须和字符串的第9位n[8]相等.
求生成该字符串的算法.要写好的

解决方案 »

  1.   

    其实这个算法很简单。大家看n[8]那位是乘了0,所以0*n[8]实际可以去掉。这样,其实就是对一个16位的随机字符串,计算它按上面公式得到的sum,再mod11后得到的y,就是作为这个16位字符串的第9位啊!!真简单!!
    比如我有个16随机字符串:11111111111111,我要得到的结果应该是11111111X11111111(X是第9位)
    按上面公式,可以得到X是1,所以17位数字11111111111111111就符合你的要求。程序懒得写了。
      

  2.   

    刚才说的不清楚,再加这个
         switch(a[i]){
                    case 'A': n[i]=1; break;
                    case 'B':n[i]=2; break; 
                    case 'C':n[i]=3;break;
                    case 'D':n[i]=4;break;
                    case 'E':n[i]=5;break;
                    case 'F':n[i]=6;break;
                    case 'G':n[i]=7;break;
                    case 'H':n[i]=8;break;
                    case 'J':n[i]=1;break;
                    case 'K':n[i]=2;break;
                    case 'L':n[i]=3;break;
                    case 'M':n[i]=4;break;
                    case 'N':n[i]=5;break;
                    case 'P':n[i]=7;break;
                    case 'R':n[i]=9;break;
                    case 'S':n[i]=2;break;
                    case 'T':n[i]=3;break;
                    case 'U':n[i]=4;break;
                    case 'V':n[i]=5;break;
                    case 'W':n[i]=6;break;
                    case 'X':n[i]=7;break;
                    case 'Y':n[i]=8;break;
                    case 'Z':n[i]=9;break;
                    case 'a':n[i]=1;break;
                    case 'b':n[i]=2;break;
                    case 'c':n[i]=3;break;
                    case 'd':n[i]=4;break;
                    case 'e':n[i]=5;break;
                    case 'f':n[i]=6;break;
                    case 'g':n[i]=7;break;
                    case 'h':n[i]=8;break;
                    case 'j':n[i]=1;break;
                    case 'k':n[i]=2;break;
                    case 'l':n[i]=3;break;
                    case 'm':n[i]=4;break;
                    case 'n':n[i]=5;break;
                    case 'p':n[i]=7;break;
                    case 'r':n[i]=9;break;
                    case 's':n[i]=2;break;
                    case 't':n[i]=3;break;
                    case 'u':n[i]=4;break;
                    case 'v':n[i]=5;break;
                    case 'w':n[i]=6;break;
                    case 'x':n[i]=7;break;
                    case 'y':n[i]=8;break;
                    case 'z':n[i]=9;break;
                    case '1':n[i]=1;break;
                    case '2':n[i]=2;break;
                    case '3':n[i]=3;break;
                    case '4':n[i]=4;break;
                    case '5':n[i]=5;break;
                    case '6':n[i]=6;break;
                    case '7':n[i]=7;break;
                    case '8':n[i]=8;break;
                    case '9':n[i]=9;break;
                    case '0':n[i]=0;break;}
      

  3.   

    写了一段代码,不过并不完全符合你的要求。因为只包含数字。而且对余数为10的情况也没有处理。
    聪明的话,你在这基础上改很容易了。
            String[] base={"8","7","6","5","4","3","2","10","0","9","8","7","6","5","4","3","2"};
            int[] seq=new int[17];
            int total=0;
            
            
            for(int i=0;i<seq.length;i++){
                int iBase=Integer.parseInt(base[i]);
                if(i==8){ 
                    seq[8]='X';
                } else {
                    seq[i]=(int)Math.abs(Math.random()*10);
                    total=total+seq[i]*iBase;
                }
            }
            int y=total%11;
            seq[8]=y;
            for(int i=0;i<seq.length;i++){
                System.out.print(seq[i]);
            }