怎么算的又道题

人人网 - 抱歉
哦,抱歉,好像看不到了
现在你可以:
看看其它好友写了什么
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&请你试试,也计算一下
&&老年痴呆的最初表现是:计算不清。刚好这里有道题请大家算算,看你是否开始老年痴呆了哈。李师傅是卖鞋的,一只鞋进价35元,现亏本大甩卖,顾客来店里,30元买了一双鞋,给了李师傅100元假钱,李师傅没零钱,于是找邻居换了100元。事后邻居存钱过程中发现钱是假的,被银行没收了,李师傅又赔了邻居100,请问李师傅一共亏了多少?(这道题目不简单,到底亏了多少?这是在某老年群做的一道题,100多人的群,半个小时之内只有两人答对,&请你试试!&)
已投稿到:1、存在一个数组,数组大小为2n+1,里面有n对个数,加上另外一个单独出现的数,例如:1,2,2,3,1.(数组是无序的,考虑排序的话一定会超过限制)这5个数中的单独的数就是3,要你用你能想到的最高效率的方法找出来。这个绝对是个老题,old了啊,old了啊。大家很容易就想到将所有的数直接异或来获得答案,这绝对是个非常好的方法。
2、我也在面试中较快的想到了这个方法,但是当这个问题的进化版出现的时候,我愣了很久,问题改为数组的大小为2n+2,也就是说有两个只出现一次的数了。
举个例子,1,2,3,2,4,1,这个例子中,3,4这两个数字就是我们要找的数。此时我们继续沿着异或的思路找下去,我们得到一个结果,这个结果就是3,4两个数字,哪些位不同。这样我们将可以根据这个不同位来进行区分,我们为了简便选择最低位为1的一个数,例如此时,选择flag=001,此时遍历整个数组,初始化num1,num2为0,将每个元素与flag进行按位与操作,如果大于0,那么与num1异或,如果等于0,那么与num2异或。这样遍历一遍之后,那么num1,num2就是我们要找的这两个数了。
代码实现还是很简单,于是这里就不贴了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20941次
排名:千里之外
原创:10篇
转载:11篇
(1)(2)(3)(2)(12)(2)有道前端面试题:两个很大数如何做加法运算?_问答_ThinkSAAS
有道前端面试题:两个很大数如何做加法运算?
有道前端面试题:两个很大数如何做加法运算?
写一个函数处理大数据的相加问题,所谓的大数据是指超出了整型,长整型之类的常规数据类型表示范围的数据。实现语言不限。
昨天在网上看到这道题,感觉很奇怪,难道还有什么算法能比原生的符号运算更快?看到这个链接:,我测试了一下,大数据函数就出错,速度也明显不行,请教这道题的思路是什么?
(链接源代码有笔误,我修改了下,贴在下面)
&!DOCTYPE HTML&
&html lang="en-US"&
&meta charset="UTF-8"&
&title&&/title&
&script type="text/javascript"&
window.onload = function () {
console.time("strNumAdd")
var strAdd = function (srcA, srcB) {
var i, temp, tempA, tempB, len, lenA, lenB, carry = 0;
var res = [],
arrA = [],
arrB = [],
cloneArr = [];
arrA = (srcA +"").split("");
arrB = (srcB +"").split("");
arrA.reverse();
arrB.reverse();
lenA = arrA.
lenB = arrB.
len = lenA & lenB ? lenB : lenA;
for (i = 0; i & i++) {
tempA = parseInt(arrA[i], 10);
tempB = parseInt(arrB[i], 10);
temp = tempA + tempB +
if (temp & 9) {
res.push(temp - 10);
carry = 1;
res.push(temp);
carry = 0;
cloneArr = lenA & lenB ? arrA : arrB;
for (; i & cloneArr. i++) {
tempA = parseInt(cloneArr[i], 10);
temp = tempA +
if (temp & 9) {
res.push(temp - 10);
carry = 1;
res.push(temp);
carry = 0;
return (res.reverse()).join('');
console.log(strAdd(, 8))
console.timeEnd("strNumAdd")
console.time("normalAdd")
console.log(, 8)
console.timeEnd("normalAdd")
JS不知道,在Photoshop中内存占用和图片长加宽的平方成正比
A Javascript library for arbitrary-precision decimal and non-decimal arithmetic
一个关于大数运算的 javascript 库。
原生 js 浮点数运算:
0.3 - 0.1 // 0.99998
bignumber 运算:
x = new BigNumber(0.3)
x.minus(0.1) // '0.2'
x.minus(0.6, 20) // '0'
这个问题简单debug一下就能发现问题所在了。大数字被表示为科学计数法了,如传参进去,在执行arrA = (srcA +"").split("");这句代码的时候,表达式(srcA+"")实际上是“2.9876e+22”这样的字符串。
回想起大一时候学ACM的时候做的大数相加题。
那个时候我自己想的思路是把大数当字符串输入,每位变成数字相加,有进位就进位,lz给的代码大概也是这个意思。当然高深的算法我没学下去。。可以搜索acm的大数相加,虽然基本上是c++的解法占多数。
这面试题明显是考查ACM方面的算法。。前端考算法都是耍流氓,真想匿名
function add(a, b) {
var carry = 0, result = [],
len = Math.max(a.length, b.length), i =
while (i--) {
var sum = (+a[i - len + a.length]||0) + (+b[i - len + b.length]||0) +
carry = parseInt(sum / 10);
result.unshift(sum % 10);
if (carry) result.unshift(carry);
return result.join('');
添加你想要问的问题
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信}

我要回帖

更多关于 大话西游2答题器有道 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信