超过16位且最后一位是1的整数会出现一个奇葩的问题

之前在牛客做笔试题时发现了这样一个问题 :
定义c为10011100011101111的字符串,不管是显示转换还是隐式转换最后出来的数字都是10011100011101112
图片说明
更进一步实验发现,把10011100011101111赋予变量oo,再输出oo,结果为10011100011101112
图片说明
目前通过实验发现超过16位且最后一位是1的整数在字符串/数字相互转换的时候会出现问题,并且出现问题的直接原因是定义之后这些数字会比原值多1,但这个范围并没有超出js能够表示的最大范围
一下几个数大家可以试一下
10001000101111011
10001000111011111
10011100011101111
10101111110010001
10101111110101111

发现这个问题的笔试题是牛客网上《2017校招真题编程练习》中有一道来自京东的《幸运数》,题目要求找出这样子的十进制数:十进制下每一位的和等于转为二进制后每一位的和。在解题的过程中发现有些十进制的数在转二进制后两种表示方式表示出来的值不一样——这样就是为什么前面举的例子中的数字看起来都像二进制数。

1个回答

这个蛋疼的问题是因为javascript没有long类型,不支持高精度运算是2的多少次方我忘记了,有兴趣你可以查一下,超过这个限制后js就抽了

wopelo
wopelo js能精确表示的整数范围是正负2的53次方,我以前记错了,遇到这个问题的时候一直以为没有超过上限
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
怎么把一个整数的最后一位置换
怎么把一个整数的最后一位置换rn1001rn换成 1008rn
如何实现最后一位整数的四舍五入。
如何实现最后一位整数的四舍五入。比如1214-1211变成1210 1215还是1215 1216-1219变成1220
c#取整数的最后一位的函数是神马
整数的位置不固定要求取到整数的最后一位rn如果最后一位大于1则取5,如果大于5则末位进一变0rnrn在线等
一个未知进制的数字,整数,如何获得它的最后一位?
一个未知进制的数字,整数,如何获得它的最后一位?不用字符串的方式。
判断一个数字的最后一位
rn是否是 9 rnrn比如 9,19,99,109 ...
html出现的奇葩问题
[img=https://img-bbs.csdn.net/upload/201704/20/1492659160_616757.png][/img][img=https://img-bbs.csdn.net/upload/201704/20/1492659166_556102.png][/img][img=https://img-bbs.csdn.net/upload/201704/20/1492659173_149439.png][/img]rn如以上三张图,搞不明白为什么会多出来两个div
AppReview 奇葩问题1
最近经过苹果死磕微信等打赏问题,苹果审核更加严格了,什么JSPatch热更新,服务器解锁功能,网站下载Inhouse安装包,fir.im分发下载等都会被拒,而且还恐吓说以后你的所有app都会被延迟审核(坑爹)。e.g..During review, your app installed or launched executable code, which is not permitted on t...
js超过16位数字会损失精度的问题
在项目中java使用Long类型来表示有18位数字的订单号,传到前端时由于js代码处理超过16位的数字时会损失精度,所以要在后台把数字转换成字符串再传输。 一开始我打算手动把bean转换成JSONArray,再遍历这个json数组取值,将数字转换成字符串,再将这个字符串设置回原来的位置,但是发现这样没有效果。 1、上网查发现可以这样 设置返回值序列化时使用alibaba的jastjson,不...
如何把IP地址最后一位+1?
比如LPCSTR HOST="192.168.1.1"rn想要让程序进行循环,每次循环HOST最后一位+1
一个简单的输出,求解为什么最后一位会变?
[code=java]public class Text4 rn public static void main(String[] args) rn int a = 10;rn int b = 3;rn System.out.println(a/b);rn System.out.println(a/(float)b);rn System.out.println(a * 1.0 /(float)b);rn rnrn[/code]rn[img=https://img-bbs.csdn.net/upload/201706/01/1496328330_687725.png][/img]rn最后一位什么变成了5?
求正则表达式。字符串不超过8位,且必须只有最后一位为“#”
正确:rnaaaaa#rnaaaaaaa#rn错误:rnaa##rnaaa##aarnaaaaaarn#####rnrn急!!rn先谢过了
select最后一位是奇数的字符串
rntbnm:routbrncolumnrnad1324rnad1321rnad1333rnad4569rn......rnselect column from routb执行正确rn但select column from routb where column like '%3'或 column%2=1却返回空。rn为什么?在线等,着急ing!
substr()返回的字符串最后一位是问号
substr()返回的字符串最后一位是问号rn比如:“USB接口? ”接口后面就是个问号,但标题并不是。rn我试过:rn $aa=substr($item->name,0,22);rn $bb=str_replace('?','',$aa);rn但$bb还是有?号。求助。rn
身份证最后一位
公民身份证号码按照 GB11643—1999《公民身份证号码》国家标准编制,由18位数字组成:前6位为行政区划分代码,第7位至14位为出生日期码,第15位至17位为顺序码,第18位为校验码。对于顺序码来说,奇数为男,偶数为女 330602 19770717 201 1 浙江省绍兴市越城区 1977年07月17日 男 最后一位的计算方法: 1.先算出每一位的加权(17位) 2.对每一位(
身份证最后一位校验码
身份证最后一位校验码 源代码下载地址:http://www.zuidaima.com/share/1734424679222272.htm
时间的最后一位
比如rnrn2010-06-20 14:35:00rn2010-01-20 14:32:00rn...rnrnrnrn求rnrn最后一位是9或者5的记录
imei最后一位校验码
这是imei详细算法文档,不妨下载看看,有助于代码的实现。
txt文件最后一位是什么?
(词法分析)源程序:rn#include rn#include rn#include rn#include rn#include rnrnint IsLetter(char ch) rn/*判断是否是字母,是则返回 1,否则返回 0 */ rnif(isalpha(ch)) return 1; rnreturn 0; rn rnint IsDigit(char ch) rn/*判断是否为数字或字母,是则返回 1,否则返回 0 */ rnif(isalnum(ch)) return 1; rnreturn 0; rn rnint IsSpace(char ch) rn/*判断是否为空白符(空格、换行、制表符等),是则返回 1,否则返回 0*/ rnif(isspace(ch)) return 1; rnreturn 0; rn rnvoid GetChar(FILE *fp,char *ch) rn/*读取字符送ch*/ rn*ch = fgetc(fp); rn rnvoid GetBC(FILE *fp,char *ch) rn/*如果是空白则继续读下一个,直到不是空白*/ rndo rnGetChar(fp,ch); rnwhile(IsSpace(*ch)&&(*ch != EOF)); rn rnvoid Retract(FILE *fp,char *ch) rn/*光标回退一位,并使 ch 为空*/ rnfseek(fp,-1,1); rn*ch = ''; rn rnchar Reserve(char *strToken) rn/*返回关键字的编码*/ rnif(strcmp(strToken,"main") == 0) return '2';rnif(strcmp(strToken,"int") == 0) return '1';rnif(strcmp(strToken,"char") == 0) return '3';rnif(strcmp(strToken,"if") == 0) return '4';rnif(strcmp(strToken,"else") == 0) return '5';rnif(strcmp(strToken,"for") == 0) return '6';rnif(strcmp(strToken,"while") == 0) return '7';rnreturn '0'; rn rnvoid Concat(char *strToken, char *ch) rn/*将ch中的字符连接到strToken后面*/ rnint i; rnfor(i=0;i<80;i++) rnif(*strToken == NULL) rn*strToken = *ch; rnbreak; rn rnstrToken++; rn rn rnrnint lexSubFunc(FILE *fp1,FILE *fp2) rn/*词法分析子程序*/ rnchar ch,code; rnint i; rnchar strToken[80]; rnwhile(1) rnGetBC(fp1,&ch); rnfor(i=0;i<80;i++) strToken[i]=NULL;rnif(ch == EOF) return 0; rnif (IsLetter(ch)) rnwhile (IsLetter(ch) || IsDigit(ch)) rnConcat(strToken,&ch); rnGetChar(fp1,&ch); rn rnRetract(fp1,&ch); rncode = Reserve(strToken); rnif (code == '0') rnprintf("(10,%-6s)\n",strToken);rnfputs("(10,\"",fp2); fputs(strToken,fp2); fputs("\")\n",fp2);rn rnelse rnprintf("(%2c,%-6s)\n",code,strToken);rnfputs("(",fp2); fputc(code,fp2);fputs(",\"",fp2);fputs(strToken,fp2); fputs("\")\n",fp2);rn rnrnelse if (IsDigit(ch)) rnwhile (IsDigit(ch)) rnConcat(strToken,&ch); rnGetChar(fp1,&ch); rn rnRetract(fp1,&ch); rnprintf("(20,%-6s>\n",strToken);rnfputs("(20,\"",fp2); fputs(strToken,fp2); fputs("\")\n",fp2);rn rnelse if (ch == '=') rnGetChar(fp1,&ch);rnif(ch == '=')rnprintf("(39,==%3c)\n",' ');rnfputs("(39,\"==\")\n",fp2);rnrnelsernRetract(fp1,&ch);rnprintf("(21,=%5c)\n",' ');rnfputs("(21,\"=\")\n",fp2);rnrnrnelse if (ch == '+') rnprintf("(22,+%5c)\n",' ');rnfputs("(22,\"+\")\n",fp2);rn rnelse if (ch == '-') rnprintf("(23,-%5c)\n",' ');rnfputs("(23,\"-\")\n",fp2);rnrnelse if (ch == '*') rnprintf("(24,*%5c)\n",' ');rnfputs("(24,\"*\")\n",fp2);rn rnelse if (ch == '/') rnprintf("(25,/%5c)\n",' ');rnfputs("(25,\"/\")\n",fp2);rn rnelse if (ch == '(') rnprintf("(26,(%5c)\n",' ');rnfputs("(26,\"(\")\n",fp2);rn rnelse if (ch == ')') rnprintf("(27,)%5c)\n",' ');rnfputs("(27,\")\")\n",fp2);rn rnelse if (ch == '[') rnprintf("(28,[%5c)\n",' ');rnfputs("(28,\"[\")\n",fp2);rn rnelse if (ch == ']') rnprintf("(29,]%5c)\n",' ');rnfputs("(29,\"]\")\n",fp2);rn rnelse if (ch == '') rnprintf("(30,%5c)\n",' ');rnfputs("(30,\"\")\n",fp2);rn rnelse if (ch == '') rnprintf("(31,%5c)\n",' ');rnfputs("(31,\"\")\n",fp2);rn rnelse if (ch == ',') rnprintf("(32,,%5c)\n",' ');rnfputs("(32,\",\")\n",fp2);rn rnelse if (ch == ':') rnprintf("(33,:%5c)\n",' ');rnfputs("(33,\":\")\n",fp2);rnrnelse if (ch == ';') rnprintf("(34,;%5c)\n",' ');rnfputs("(34,\";\")\n",fp2);rnrnelse if (ch == '>') rnGetChar(fp1,&ch);rnif(ch == '=')rnprintf("(37,>=%4c)\n",' ');rnfputs("(37,\">=\")\n",fp2);rnrnelsernRetract(fp1,&ch);rnprintf("(35,>%5c)\n",' ');rnfputs("(35,\">\")\n",fp2);rnrnrnelse if (ch == '<') rnGetChar(fp1,&ch);rnif(ch == '=')rnprintf("(38,<=%4c)\n",' ');rnfputs("(38,\"<=\")\n",fp2);rnrnelsernRetract(fp1,&ch);rnprintf("(36,<%5c)\n",' ');rnfputs("(36,\"<\")\n",fp2);rnrnrnelse if (ch == '!') rnGetChar(fp1,&ch);rnif(ch == '=')rnprintf("(40,!=%3c)\n",' ');rnfputs("(40,\"!=\")\n",fp2);rnrnelsernRetract(fp1,&ch);rnrnelse if (ch == '\0') rnprintf("(1000,\0%3c)\n",' ');rnfputs("(1000,\"\0\")\n",fp2);rnrnrn rnvoid main()rn/*主程序*/ rnFILE *fp1,*fp2; rnif((fp1=fopen("input.txt","rt"))==NULL)rn rnprintf("Cannot open input.txt\n");rngetch(); exit(1); rn rnif((fp2=fopen("out.txt","wt+"))==NULL) rn rnprintf("Cannot create out.txt FILE.strike any key exit"); rngetch(); exit(1); rn rnlexSubFunc(fp1,fp2); rnfclose(fp1); rnfclose(fp2);rngetch(); rn rnrnrn如果input.txt文件内容为:9*arn运行后进入死循环(注意a后面没有空格)rn如果input.txt文件内容为:9*arn运行后程序可以正常结束。rnrn同样是当ch==EOF是退出的,为什么第一种就退不了呢?rnrn各位GGJJ帮我看看啊rn谢谢了
orcle 截取最后一位
类型为number,怎么截取最有一位数字?
取Byte最后一位
一个Byte变量,值是841 我想取41放到另一个byte里怎么做?
判断身份证号码最后一位
输入一串不带最后一格的字符串,程序自动判断字符串最后一位。
幂方的最后一位
#include #include using namespace std; int Pow(int a,int b) { int ans=1; while(b) { if(b&1) ans=ans*a%10; a*=a%10; b>>=1; } return ans; } int main () {
C. 身份证号码最后一位
#include &amp;lt;stdio.h&amp;gt; void zi() { char a[18]; int z; scanf(&quot;%s&quot;,a); z=(a[0]-'0')*7+(a[1]-'0')*9+(a[2]-'0')*10+(a[3]-'0')*5+(a[4]-'0')*8+(a[5]-'0')*4+(a[6]-'0')*2+(a[7]-'0')*1+(a[8]-'0')*6+(a[9...
去掉数组最后一位
[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/64.gif][/img]arridrn0,1,177,181rn0,1,177,182rn0,1,183rn0,1,183,184rn0,1,183,185rnrn我有一字段arrid,其中数据如下,我想去掉最后那一位,应该怎么写个函数? 不知道有没有Split这样的解决办法,谢谢! update a set arrid=???? (还有一字段为id,最后一位其实就是id的值,重复了,所以需要去除)rnrnrn就是想得到下面这样的数据rnarridrn0,1,177rn0,1,177rn0,1rn0,1,183rn0,1,183rn
~~~~~~~·删除数组最后一位~~~~~~~~
比如我定义一个类,然后用数组储存这个类初始化的对象 rn然后存入文件中,用二进制文件 rn可是我现在要删除这个已经存入文件的数组里面的最后一个元素 rn想用这个操作rn把文件先读到数组中 然后删除数组最后一个 再写到文件rn可是,不知道怎么把数组最后一个删除....rn哈哈~~~~~
截取小数点前一位和最后一位
String money = &quot;9.999&quot;; 截取小数点前面的内容:     money.substring(0, money.indexOf(&quot;.&quot;)); 截取最后一位:     money.substring(money.length()-1,money.length()); 截取小数点后面的内容(包含小数点):     money.substring(money.indexOf...
VS2010出现了个奇葩问题。。。
之前做好的东西,一直没管,突然闲来没事就再次看下上次编的程序,运行都好着呢。我觉得有的地方想改下,就加了点代码,结果重新运行后没有任何反应,我就纳闷了,随便找一个按钮,加个消息框,重新运行后连消息框都不弹,也不报错,就还是保持着我几个月前的做好的那个状态。更奇葩的是,我把其中一个按钮改的面目全非,连按钮名都改了,重启了电脑,在窗口视图区都显示的是我改好的样子,运行后又成之前的那个样子了。。这是什么情况。。。
2019/1/21分离整数(整数不超过5位)
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123 大道至简 思路要简单 #include &amp;lt;stdio.h&amp;gt; int main() { int n,i,a; int number; scanf(&quot;%d&quot;,&amp;amp;n); number=n; if (n&amp;lt;10) { ...
求一个整数的最后三位
一个整数,求它的最后三位,对于每个测试实例,请输出整数的最后三位表示的整数(前缀0不用考虑)。(麻烦写一下代码)rnrnrn麻烦各位解决一下,谢谢啦!
1、毕业答辩是最后一个教学环节
1、毕业答辩是最后一个教学环节,是对学生综合能力的一次较全面的检查,是一种特殊形式的考试,参加答辩的全体教师、秘书与全体同学必须认真对待,服从答辩委员会统主任
为什么express会出现这么奇葩的循环引用问题?
问题1:rnrnrnrn// 一个中间件栈,处理指向 /user/:id 的 GET 请求rnrouter.get('/xy', function (req, res, next) rn console.log('--------------');rn //console.log(JSON.stringify(req)); //为什么这个不行? rn console.log(util.inspect(req, depth: null))rn rn, function (req, res, next) rn // 渲染常规页面rn console.log("xxxxx");rn // res.render('regular');rnrn next();rn);rnrn console.log(JSON.stringify(req)); rn rn 这一句打印的时候,会提示: Converting circular structure to JSON。rn rn 因此我上网查了一下,什么叫循环引用,看个例子:rn http://blog.csdn.net/isaisai/article/details/51818766rn rnvar util = require("util")rnvar a = ;rna.b = a;rna.c = "123"; rn// console.log(JSON.stringify(a)); // 报错rnconsole.log(util.inspect(a,depth:null)); //depth:null 展开全部层级rnrn————————————————————分割线——————————————————rnrn以上叫循环引用,因此我立即把req重新命名,命名成:req1, 结果依然不奏效。rnrnrn于是我只好采用util.inspect 来解决这个问题了。rnrnrn第2个问题: 为什么console.log(req)又可以呢? rnrnrn按道理说, js的对象也是json格式的(当然可以包含函数) ,因此console.log一个对象的时候,rnrn内部的操作应该和util.inspect 差不多才对吧? rnrnrnrn
整数中1出现的次数
题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 链接:https://www.nowcoder.com/questionTer...
整数中1出现的次数
整数中1出现的次数 **题目描述** 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。 分析:   本题比较容易想到的点就是分别计算个位、十位以及更高位中的1
怎么检测仪一个字符串的最后一位的值?
同上!
mysl 将一个字段最后一位删除
update tmp set e = left(e,CHAR_LENGTH(e) - 1);
整数中1出现的个数
题目: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 思路: 我们想到的办法就是从1开始遍历到n,计算每个数中1出现的个数,...
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池