前言
关于进制数的加法
在笔试或者面试都是一个非常常见的题型
最主要的是它的从后往前加以及进位的处理
此处放出的代码是带输入输出,比较全面万能
1. 进制加法
1.1 字符串的十进制加法
为了更好的拓展N进制,先从二进制开始
从后往前加,要判断有没有数字,以及有没有进位,以及数字的进位怎么处理
题目:输入两字符串,输出其十进制的加法
延伸拓展:
此题来源于:leetcode:415. 字符串相加
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String num1=sc.nextLine();
String num2=sc.nextLine();
int i=num1.length()-1,j=num2.length()-1;
//处理进位
int add=0;
//通过StringBuilder处理,主要它有反转的这个函数
StringBuilder ans=new StringBuilder();
//此处是个大条件,只有一方不满足才会退出
while(i>=0||j>=0||add!=0){
//转换为字母通过-‘0’
int x=i>=0?num1.charAt(i)-'0':0;
int y=j>=0?num2.charAt(j)-'0':0;
int result=x+y+add;
//添加值到每个字符串的最后一个
ans.append(result%10);
//添加进位给予到下一个值
add=result/10;
i--;
j--;
}
//字符串的反转
ans.reverse();
System.out.println(ans.toString());
}
}
1.2 字符串的N进制加法
如果转换为N进制,就是进位以及保留的位数,将上面的10改成所想要的进制即可
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String num1=sc.nextLine();
String num2=sc.nextLine();
//注意区别在这里,多个个进制输入
int base=sc.nextInt();
int i=num1.length()-1,j=num2.length()-1;
//处理进位
int add=0;
//通过StringBuilder处理,主要它有反转的这个函数
StringBuilder ans=new StringBuilder();
//此处是个大条件,只有一方不满足才会退出
while(i>=0||j>=0||add!=0){
//转换为字母通过-‘0’
int x=i>=0?num1.charAt(i)-'0':0;
int y=j>=0?num2.charAt(j)-'0':0;
int result=x+y+add;
//添加值到每个字符串的最后一个
ans.append(result%base);
//添加进位给予到下一个值
add=result/base;
i--;
j--;
}
//字符串的反转
ans.reverse();
System.out.println(ans.toString());
}
}
2. 进制转换
2.1 十进制转七进制
题目:504. 七进制数
给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。
示例 1:
输入: num = 100
输出: “202”
示例 2:
输入: num = -7
输出: “-10”
提示:
-107<= num <= 107
思路:
class Solution {
public String convertToBase7(int num) {
if(num==0)return "0";
boolean ff=num<0;
//记得要转换为正数来计算
num = Math.abs(num);
StringBuilder sb=new StringBuilder();
while(num!=0){
sb.append(num%7);
num/=7;
}
//添加负数到后面,然后在做反转才是对的
if(ff)sb.append('-');
sb.reverse();
return sb.toString();
}
}
2.2 十进制转换N进制
注意,如果是数字转字符,则位数字+‘A’,如果位字符转换为数字,则为字符-‘0’
题目:类似提供一个数字,以及进制数(2-16)将其转换成对应的进制数
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
if(num==0)System.out.println("0");
//注意区别在这里,多个个进制输入
int base=sc.nextInt();
//主要为了后期添加一个符号而已
boolean state =num<0;
//正数负数都变为正数来计算
num=Math.abs(num);
//通过StringBuilder处理,主要它有反转的这个函数
StringBuilder ans=new StringBuilder();
while(num!=0){
//判断添加到末尾的数字是多少,大于10的要特殊处理,转换为字母
int f= num % base;
if(f>=10){
//将其转换成字母
ans.append((char)(f-10+'A'));
}else{
ans.append(f);
}
num/=base;
}
if(state)ans.append('-');
//字符串的反转
ans.reverse();
System.out.println(ans.toString());
}
}