小明设计了一种基于质数(2、3、5、7、11…)的变进制数,第一位为2进制,第二位为3进制,第三位为5进制,以此类推。请将该变进制数转化为十进制数。
难点1:理解题意,例如输入3456,则答案为3*(5*3*2*1)+4*(3*2*1)+5*(2*1)+6*(1)的值,a-z代表10-35。二进制1000的第一位权值2^3即2*2*2*1,和这个类似,只不过这个的权值是质数。
难点2:因为数值过大所以要用长整型
package test;
import java.util.Scanner;
public class test{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=sc.next();
int[] zhishu={1,2,3,5,7,11,13,17,19,23,29,35}; //也就是权值,例子中括号里面的部分
int l=s.length();
long ans=0,tmp; //长整型因为数值过大
for(int i=0;i<l;i++){
tmp=1;
char a=s.charAt(i); //每次从左到右取一个字符
for(int j=l-i;j>0;j--) {
tmp*=zhishu[j-1]; //tmp代表当前数的权值
}
ans+=turn(a)*tmp; //结果=当前数*权值然后累加
}
System.out.print(ans);
}
public static int turn(char a){ //将字符转换为数字
if(97<=a && a<=122){ //字母按照ascii码转换
return a-87;
}
else{
String b=String.valueOf(a); //字符转数字先转为字符串,然后转为数字
int c=Integer.valueOf(b);
return c;
}
}
}