-
java三进制加法_字节跳动-算法面试-36进制加法
2021-03-13 20:52:1936进制由0-9,a-z,共36个字符表示,最小为'0'* '0''9'对应十进制的09,'a''z'对应十进制的1035* 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47* 要求按照加法规则计算出任意两个36进制正整数的...public class Test36Bin {
/**
* 36进制由0-9,a-z,共36个字符表示,最小为'0'
* '0''9'对应十进制的09,'a''z'对应十进制的1035
* 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47
* 要求按照加法规则计算出任意两个36进制正整数的和
* 如:按照加法规则,计算'1b' + '2x' = '48'
*
* 要求:不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制
*
* @param args
*/
public static void main(String [] args) {
String result = addFunWithStr("1b", "2x");
System.out.println("result = " + result);
}
/**
* 获取值
* @param ch
* @return
*/
public static int getIntFromChar(char ch) {
int ret = -1;
if (ch >='0' && ch <= '9') {
ret = ch - '0';
} else if (ch >= 'a' && ch <= 'z') {
ret = (ch - 'a') + 10;
}
return ret;
}
public static String addFunWithStr(String param1, String param2) {
StringBuffer stringBuffer = new StringBuffer();
String symbol = "0123456789abcdefghijklmnopqrstuvwxyz";
int param1Len = param1.length();
int param2Len = param2.length();
int i = param1Len - 1;
int j = param2Len - 1;
if (i < 0 || j < 0) {
return null;
}
int temp = 0;
while (i >= 0 && j >= 0) {
char ch_1 = param1.charAt(i);
char ch_2 = param2.charAt(j);
int v1 = getIntFromChar(ch_1);
int v2 = getIntFromChar(ch_2);
int ret = v1 + v2;
if (ret >= 36) {
int index = ret - 36 + temp;
char sv = symbol.charAt(index);
stringBuffer.append(sv);
temp = 1; //进位
} else {
int index = ret + temp;
char sv = symbol.charAt(index);
stringBuffer.append(sv);
temp = 0;
}
i--;
j--;
}
while (i >= 0) {
char ch_1 = param1.charAt(i);
stringBuffer.append(ch_1);
i--;
}
while (j >= 0) {
char ch_2 = param2.charAt(i);
stringBuffer.append(ch_2);
j--;
}
StringBuffer result = stringBuffer.reverse();
return result.toString();
}
}
-
20 七进制数、36进制加法
2020-04-23 22:47:46七进制数、36进制加法 /** * 36进制由0-9,a-z,共36个字符表示,最小为'0' * '0''9'对应十进制的09,'a''z'对应十进制的1035 * 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 * 要求按照...七进制数、36进制加法
/** * 36进制由0-9,a-z,共36个字符表示,最小为'0' * '0''9'对应十进制的09,'a''z'对应十进制的1035 * 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 * 要求按照加法规则计算出任意两个36进制正整数的和 * 如:按照加法规则,计算'1b' + '2x' = '48' * * 要求:不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制 * * @param args */
/** * @Auther: liuhaidong * Data: 2019/11/21 0021、11:40 * Description: * @version: 1.0 */ public class Main { public static void main(String [] args) { String result = addFunWithStr("1b", "2x"); System.out.println("result = " + result); } /** * 获取值 * @param ch * @return */ public static int getIntFromChar(char ch) { int ret = -1; if (ch >='0' && ch <= '9') { ret = ch - '0'; } else if (ch >= 'a' && ch <= 'z') { ret = (ch - 'a') + 10; } return ret; } public static String addFunWithStr(String param1, String param2) { StringBuffer stringBuffer = new StringBuffer(); String symbol = "0123456789abcdefghijklmnopqrstuvwxyz"; int param1Len = param1.length(); int param2Len = param2.length(); int i = param1Len - 1; int j = param2Len - 1; if (i < 0 || j < 0) { return null; } int temp = 0; while (i >= 0 && j >= 0) { char ch_1 = param1.charAt(i); char ch_2 = param2.charAt(j); int v1 = getIntFromChar(ch_1); int v2 = getIntFromChar(ch_2); int ret = v1 + v2; if (ret >= 36) { int index = ret - 36 + temp; char sv = symbol.charAt(index); stringBuffer.append(sv); temp = 1; //进位 } else { int index = ret + temp; char sv = symbol.charAt(index); stringBuffer.append(sv); temp = 0; } i--; j--; } while (i >= 0) { char ch_1 = param1.charAt(i); stringBuffer.append(ch_1); i--; } while (j >= 0) { char ch_2 = param2.charAt(i); stringBuffer.append(ch_2); j--; } StringBuffer result = stringBuffer.reverse(); return result.toString(); } }
七进制数
给定一个整数,将其转化为7进制,并以字符串形式输出。
示例 1:
输入: 100
输出: "202"
示例 2:输入: -7
输出: "-10"
注意: 输入范围是 [-1e7, 1e7] 。基本思路就是迭代除7取余,存到一个StringBuilder里,最后反转即可。
对于负数,直接先取正处理,然后加上负号即可。class Solution { public String convertToBase7(int num) { String ans = ""; if (num < 0) { num = 0 - num; ans += "-"; }; StringBuilder sb = new StringBuilder(); do { int mod = num % 7; sb.append((char)('0'+mod)); num = num / 7; } while (num > 0); ans += sb.reverse().toString(); return ans; } }
-
计算机基础——二进制加法
2020-02-04 23:29:29二进制加法与十进制加法是类似的,只是规则是“逢二进一”。如十进制的3+5=8,用二进制表示就是11+101=1000.可能还是有一些不懂,我们再来看个例子: 11011+1100=? 只要记住“逢二进一”,就很清楚结果是100111....人类可以轻松读懂十进制数并对其进行计算,但读起二进制数来却很不自然。计算机不能理解十进制数,却能“读懂”二进制数,并对其进行运算。二进制加法与十进制加法是类似的,只是规则是“逢二进一”。如十进制的3+5=8,用二进制表示就是11+101=1000.可能还是有一些不懂,我们再来看个例子:
11011+1100=?
只要记住“逢二进一”,就很清楚结果是100111.至于这个式子代表的是十进制的多少,我们当然有办法解读出来,但是计算机是不关心的,既然这样,我们也无须解读,就按二进制来理解就可以了.
那么现在:10011101+10011=?
你的答案是不是10110000.
-
36进制加法
2018-11-22 17:18:4136进制由0-9,a-z,共36个字符表示,最小为’0’, ‘0’、'9’对应十进制的09,‘a’、'z’对应十进制的1035 例如: '1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36...问题描述
36进制由0-9,a-z,共36个字符表示,最小为’0’, ‘0’、'9’对应十进制的09,‘a’、'z’对应十进制的1035
例如:
'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算'1b' + '2x' = '48'
要求:
- 不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制
思路
- 按照十进制的加法方法,满36向前进一位
go实现
func Add(str1 string, str2 string) string { List36 := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} i := len(str1) - 1 j := len(str2) - 1 var sum string var tem int //进位 for i >= 0 && j >= 0 { s := GetInt(str1[i]) + GetInt(str2[j]) + tem if s >= 36 { tem = 1 sum = List36[s%36]+sum } else { tem = 0 sum = List36[s]+sum } i-- j-- } for i >= 0 { s:= GetInt(str1[i])+tem if s>=36{ tem = 1 sum = List36[s%36]+sum }else { tem = 0 sum = List36[s]+sum } i-- } for j >= 0 { s:= GetInt(str2[i])+tem if s>=36{ tem = 1 sum = List36[s%36]+sum }else { tem = 0 sum = List36[s]+sum } j-- } if tem!=0{ sum="1"+sum } return sum } //将'0'-'9'映射到数字0-9,将'a'-'z'映射到数字10-35 func GetInt(a uint8) int { if a-'0' > 0 && a <= '9' { return int(a - '0') } else { return int(a-'A') + 10 } }
-
36进制加法问题——python实现
2019-08-20 19:31:17问题描述:36进制由0-9,a-z,共36个字符表示,’0’ ~ '9’对应十进制的0 ~ 9,‘a’ ~ 'z’对应十进制的10 ~ 35 例如: ‘1b’ 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求:按照加法规则计算出... -
字节跳动面试题.36进制加法
2020-03-07 18:26:31‘0’、'9’对应十进制的0、9,‘a’、'z’对应十进制的10、35 '1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算'1b' + '2x'... -
二进制差分码规则_6.4二进制的应用现代计算机
2020-11-22 19:38:131语句与公式6.2符号的模拟——算术6.3...十进制与二进制相比,十进制的数字长度更短,更容易辨识书写,另一方面十进制的应用需要掌握比二进制应用更复杂的加法表与乘法表。二进制的发明追溯至莱布尼茨。莱布尼茨对二... -
二进制差分码规则_6.4二进制的应用-现代计算机
2020-11-22 19:37:126.1语句与公式6.2符号的模拟...十进制与二进制相比,十进制的数字长度更短,更容易辨识书写,另一方面十进制的应用需要掌握比二进制应用更复杂的加法表与乘法表。二进制的发明追溯至莱布尼茨。莱布尼茨对二进制情... -
二进制与十进制
2006-04-30 10:39:00十进制计数法的加法规则是“逢十进一”,任意一个十进制可用0、1、2、3、4、5、6、7、8、9十个字符的组合表示,它的基数是10。二进制计数法的加法规则是“逢二进一”,任意一个二进制数可用0、1两个数字符表示,其... -
36进制数的加法运算
2019-09-02 10:09:15'0''9'对应十进制的09,'a''z'对应十进制的1035 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算'1b' + '2x' = '48' ... -
无符号数相加溢出_【笔记】二进制数加法半加器全加器
2021-01-05 13:08:29二进制算术运算:两个二进制数进行加法运算的规则,和十进制数基本相同。唯一的区别在于二进制数是“逢二进一”,而十进制数是“逢十进一”。我们可以把一位二进制数的加法结果全计算出来,如下: 0+0=0 0+1=1 1+0=1... -
计算机进制转换总结
2019-10-12 10:48:35二进制数首先写成加权系数展开式,然后按十进制加法规则求和。 这种做法称为"按权相加"法。 【例】:10001111 1*+1*+1*+1*+1*=143, 所以10001111的十进制表示为143。 规律:从最低位(最右)算起,位上的数字乘以... -
二进制
2021-01-31 15:08:52按权相加: 把二进制数首先写成加权系数展开式, 然后按十进制加法规则求和 十进制转二进制 整数部分: "除 2 取余, 逆序排列"法 **小数部分: "乘 2 取整, 顺序排列"法 ** **计算机中信息的存储单位 ** ... -
计算机原理学习笔记——第三章 计算机中的运算——2 加法和减法-1
2021-03-25 17:02:34从十进制加法谈起 二进制加法表(真值表) 有符号原码加法 原码二进制加法规则 补码 补码加法 补码减法 补码加法器的基本实现 补码示例 -
6.4二进制的应用-现代计算机
2020-06-22 13:48:33十进制与二进制相比,十进制的数字长度更短,更容易辨识书写,另一方面十进制的应用需要掌握比二进制应用更复杂的加法表与乘法表。 二进制的发明追溯至莱布尼茨。莱布尼茨对二进制情有独钟,用法国数学家、物理学家... -
计算机实现加法的学习心得
2017-01-25 16:37:00既然是实现人类的十进制加法,就得先回顾下我们自己的加法法则。 先看看十进制加法 : 122 + 78 = 200 对于十进制运算我们知道,进行加法时,低位满10要向高位进位,二进制改成满2进位即可,都是一样的,只是... -
二进制学习01(二进制,进制运算,数据宽度,无符号位有符号位编码规则)
2021-01-28 21:39:21二进制学习01进制一、二进制简介1)什么是二进制?2)二进制的简写形式二、进制运算1)八进制运算表(1) 加法运算表(2)乘法运算表(3)八进制简单运算题三、数据宽度1)什么是数据... 十进制是逢十进一,十六进制是逢十六 -
C++-030-位运算与进制
2020-03-12 14:43:43C+±030-位运算与进制-2020-3-11 一、位运算 1>二进制 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。...1.二进制加法 二进制 十进制 0000 0 000... -
关于进制的文章
2017-03-09 23:01:33十进制(Dec):逢十进一(加法规则) 借一当十用(减法规则) 二进制(Bin):逢二进一 借一当二用 八进制(Oct):逢八进一 借一当八用 十六进制(Hex):逢十六进一 借一当十六用 上面就一系列进制转换的运算规则 每... -
字符串相加 36进制数
2020-08-05 15:29:08* '0''9'对应十进制的0 9,'a''z'对应十进制的10 35 * 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 * 要求按照加法规则计算出任意两个36进制正整数的和 * 如:按照加法规则,计算'1b' + '... -
go语言实现36进制算法
2019-12-19 16:18:24'0''9'对应十进制的09,'a''z'对应十进制的1035 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算'1b' + '2x' = '48' ... -
js代码——36进制相加
2020-12-05 15:48:43‘0’'9’对应十进制的09,‘a’'z’对应十进制的1035 例如:‘1b’ 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算’1b’ + ‘2x... -
二进制基础运算整理
2020-11-27 19:34:05在正常的运算规则下,我们熟悉的十进制会转化成二进制在计算机中表示,这时的二进制就是原码表示,在计算机中,为了简化运算单元的逻辑处理、降低硬件电路复杂度和成本,只有加法器的硬件电路,计算机的减法是通过... -
二进制、位运算及其用处
2019-05-30 16:15:00它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二,相当于十进制的计算 表示: 小数表示例子: php中二进制表示,由于二进制是整数的一种表达方式,所以php中浮点数无二进制表示 $a = 0b101011 ... -
《逻辑与计算机设计基础(原书第5版)》——1.4 算术运算
2017-09-04 10:06:001.4 算术运算 r进制的算术运算方法和十进制类似。...除了每位的和只可能是0和1以外,二进制的加法和十进制的加法规则一样。当然,在二进制加法中,当某位的和大于1时就会产生进位(而在十进制中,只有当和大于9才会... -
计算机如何实现加法、减法
2019-08-02 09:29:33一、加法(如7+6) 转二进制。... 二进制转十进制或需要的 二、减法(如15-13) 计算机没有减法,减法也是按加法算 15-13=15+(-13)。15=00001111;13=00001101 -13的二进制=13的补码加1。11110... -
计算机基础二: 利用逻辑门搭建加法器
2020-06-05 11:01:11二进制加法与十进制的加法相似,难点在于怎么处理进位,解决了加法位和进位位之间的协作,就能很轻松的实现. 进位位的实现: 进位位 输入A 输入B 0 0 0 0 0 1 0 1 0 1 1 1 从上表的二进制进位规则不难... -
66.不用加减乘除做加法
2020-03-02 11:48:01二进制运算规则和十进制是差不多的,只不过十进制遇10进位,而二进制遇2进位,并且二进制进位后保留的余数是0. 二进制的计算是这样的: 1.计算不进位的和,也就是用异或来进行计算^ (异或也就是对应位的数不同... -
JZ48 不用加减乘除做加法
2020-09-09 15:12:49二进制加法运算无非就是满2进一。 先想好具体的实现,举个例子思考, 十进制 8 +5 = 10 +3; 二进制 2+3 = 4+1; 0010 2 0011 3 ------------ 0001 1 ^运算 0100 4 &运算同时左移一位 ------------ 0101 5 ...