题目描述
1、输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
解题思路:将正整数转换为二进制字符串,再遍历字符串统计其中1的个数
总结:js里的toString(radix),toString()方法可把一个 Number 对象转换为一个字符串,并返回数字的字符串。若省略该参数,则使用基数 10。
parseInt(string, radix)
其中,string为必需。要被解析的字符串。radix为可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则parseInt() 将返回 NaN。
parseInt(num,8); //八进制转十进制
parseInt(num,16); //十六进制转十进制
parseInt(num).toString(8) //十进制转八进制
parseInt(num).toString(16) //十进制转十六进制
parseInt(num,2).toString(8) //二进制转八进制
parseInt(num,2).toString(16) //二进制转十六进制
parseInt(num,8).toString(2) //八进制转二进制
parseInt(num,8).toString(16) //八进制转十六进制
parseInt(num,16).toString(2) //十六进制转二进制
parseInt(num,16).toString(8) //十六进制转八进制
var s=readline()
var s1=parseInt(s).toString(2)
var count=0
for(var i=0;i<s1.length;i++){
if(s1[i]=="1"){
count++
}
}
print (count)
题目描述
给定n个字符串,请对n个字符串按照字典序排列。
var n=readline()
var a=[]
while(n--){
var s=readline()
a.push(s)
}
a.sort()
for(let index in a){
print(a[index])
}
题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
解题思路:先将字符串分割放到一个数组,再反向遍历数组取出
var s=readline()
var a=s.split(" ")
var s1=''
for(var i=a.length-1;i>=0;i--){
s1+= a[i]+' '
}
print (s1)
题目描述
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
var s=readline()
var a=''
for(var i=s.length-1;i>=0;i--){
a+=s[i]
}
print(a)
题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。
解题思路:定义个obj用于存放字符的情况,其中,key是字符的值,value是可以是字符的个数(如果要统计每个字符的个数的话),也可以是true(表示这个字符存在)。遍历每一个字符,判断当前obj里是否存在这个属性,如果不存在,则把这个字符以属性的方式添加到obj,同时记录不同字符的变量要加一。
var s=readline()
var obj={}
var n=s.length
var count=0
for(var i=0;i<n;i++){
if(obj[s[i]]){
obj[s[i]]++
}else{
obj[s[i]]=1
count++
}
}
print(count)
题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
总结:在做这类看数字重复的题,我都是用一个对象通过key(数组的值)和value(有或统计出现的次数)。其中obj[s[i]]代码不会报错,而obj.s[i]代码编译报错。原因是:1、中括号法可以用变量作为属性名,而点方法不可以;2、中括号法可以用数字作为属性名,而点语法不可以;3、中括号法可以使用js的关键字和保留字作为属性名,而点语法不可以(尽量避免在变量或者属性中使用关键字或保留字);
var s =readline()
var n=s.length
var obj={}
var a=''
for(var i=n-1;i>=0;i--){
if(!obj[s[i]]){
obj[s[i]]=1
a+=s[i]
}
}
print(a)
题目描述
数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出
解题思路:对每次输入的字符串进行分割,index 0是它的索引,index 1是它的值。遍历字符串,判断索引是否已经在obj里了,如果是则要将obj里该索引对应的值更新,如果不在obj里,则将该索引加到obj里,对应的值是它的值。
总结:obj 的value是一个字符串,需转换为整型后做运算
var n=readline()
var a=[]
var obj={}
while(n--){
s=readline()
a=s.split(" ")
if(obj[a[0]]){
obj[a[0]]=parseInt(obj[a[0]])+parseInt(a[1])
}else{
obj[a[0]]=a[1]
}
}
for(var key in obj){
print(key,obj[key])
}