本文已收录于专栏
《Java入门一百例》
学习指引
- 序、专栏前言
- 一、【例题1】
- 2、解题思路
- 3、模板代码
- 4、代码解析
- 二、推荐专栏
- 三、课后习题
序、专栏前言
本专栏开启,目的在于帮助大家更好的掌握学习Java
,特别是一些Java学习者
难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
算法的学习肯定不能缺少总结,将学过的知识进行打卡,以此来进行巩固以及复习。
学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。
一、【例题1】
给定一个进制的整数
,请你输出它的十进制表示的值。
2、解题思路
题目难度:⭐️⭐️
首先题意已告诉我们不超过
,所以我们不需要担心出现字符与数字转换的情况。对于该种情况,我们也有一套公式来帮助我们进行转换:假设假设
进制整数
从右往左数的第
位数是
,那么仅第
位转换为十进制的值是:
当然那只是考虑到某个位数,对于每一位不为的数,我们都要把它转换为十进制然后加起来才是最终结果。
len
是的长度,对于
上每一位非
的数字我们都要通过
公式转换后累加。
例如有一个二进制数(10101)
,首先看最右边的一位1
,从右往左数是1
位,所以。同理得
,
。累加得到的结果是
21
,所以(10101)
的十进制表示是21
。
3、模板代码
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
String s=sc.next();
int len=s.length();
int pre=1;
int res=0;
for (int i=len-1;i>=0;i--){
int h=s.charAt(i)-'0';
res= (int) (res+h*Math.pow(x,pre-1));
pre++;
}
System.out.println(res);
}
}
4、代码解析
为了方便操作,我们将
x
进制下的数组s
当作字符串读入进行操作。
Math.pow
是一个库函数,当参数为(int a,int b)
时,返回的值。
pre
的作用类似一个指针,代表我们当前这一位数是从右往左数的第几位。