<script>
var kb=prompt("请输入整数","ok");function i(){
if(!(kb%2))
{ /*var a=kb/2;
var b=(kb+1);*/
var c=(kb/2)*(++kb);
document.write("1加到"+ --kb+"的值是:");
document.write(c); }
else
{
var a=kb/2+0.5;
var b=(1+kb)*(kb/2-0.5);
var c=(kb/2-0.5)*(++kb);
document.write("1加到"+ --kb+"的值是:");
document.write(c);}
}</script>
以上是全部的代码,不用FOR循环,纯数序逻辑。

解决方案 »

  1.   

    你自己可以去研究下,到底是FOR循环快还是纯数学快.........另外这段代码的意义是在于,写代码时,用到数序可以使代码很有趣
      

  2.   

    var num=prompt("","ok")
    document.write("1加到"+num+"的值是:");
    document.write((+num+1)*(+num)/2);哎...
      

  3.   

    抱歉,在判断奇数时,没有加上中间数。例如1加到9,那么就是(1+9)*4+中间数5=45.  1加到10就是(1+10)+(2+9)+(3+8).......(5+5)这是偶数的情况,LZ就是根据这个原理去写这个代码的。
    <script>
    var kb=prompt("请输入整数","ok");function i(){
    if(!(kb%2))

    var c=(kb/2)*(++kb);
    document.write("1加到"+ --kb+"的值是:");
    document.write(c); }
    else
    {var c=((kb/2-0.5)*(++kb))+(kb/2); 
    document.write("1加到"+ --kb+"的值是:");
    document.write(c);}
    }</script>
    原先的代码在计算奇数方面没有加上中间数,现在是完好的代码。
    我试过了,百分之百准确,不信大家可以试。
      

  4.   

    #include<stdio.h>int main()
    {
    int i=1; 
    int result=0;
    for(i=1;i<=100;i++) 
    result+=i;
    printf("%d",result)
    }这是FOR循环的C语言代码,循环了100次,你要知道,假如是要计算1+到1000呢?难道要循环1000次,而我的代码只需要一行就搞定了。循环100次和一行纯数学代码到底哪个快,我想这个根本没法比。
      

  5.   

    如果是计算100以内的数(可能是1000),用for循环比较好,但数字大了,用LZ的算法会好一些,,因为程序里涉及程序复杂度的问题,乘法的效率可能会比加法低一千倍,所以我们在考虑代码的简洁的时候还是要考虑到运行效率,高质量的代码就是这样的双方面完美结合
      

  6.   

    function func(v)
    {
    var value = 0;
    if(v==1) return 1
    value = v+func(--v)
    return value
    }
    var v =func(100)
      

  7.   

    var test = prompt("","ok");function calculator(n) {
        return n * (1 + n) / 2;
    }alert(calculator(test));(第一项+最后一项) * 个数 / 2
      

  8.   

    我觉得,用循环100次,用加法来实现1+到100,而且不能方便的实现其它1+到101,102的运算,循环100次的代价实在是很糟糕。而且每次要实现加到101等了,都要修改源代码。  即使有人说它是加法运算速度快,但循环100次,CPU连续运算100次,这能快多少?何况如果是1加到1000呢? 楼上说得对,FOR循环不是干加法运算的,用FOR循环靠循环次数来实现加法运算实在可笑无比,最多是教下新手认识下FOR循环巴了,实际上谁也不会用循环干这种可笑的加法运算。
      

  9.   

    是想说明算法有时候很重要么?可是你举的例子让我觉得,基础更重要……function fun(to){
        s = (1+to)*to/2;
        document.write("1加到" + to + "的值是:" + s);
    }
      

  10.   

    关于算法效率的考虑是没错,再怎么说也是O(n)和O(1)之间的差别,效率上没有可比性但是等差数列求和公式泪目小学数学老师泪目讲算法效率别忘了底子还是数学啊
      

  11.   

    这代码  算法蛮有趣的 
    例如
    两位数*11=AB*11=A-(A+B)-B ,比如12*11=1-3-2;89*11=8-17-9=979这种算法特征我觉得会计心算比较有用
      

  12.   

    刚学编程的人最容易犯的毛病就是跟着那些S.B教科书上S.B的例子算这个题。
    要怪的不能是初学者,而是写书的人。水平就在于细节,不能因为是给初学者写的入门章节,就这么搞,这样的话,初学者只是被忽悠的容易入歧途的初学者,而写书的人则直接降为S.B了。
      

  13.   

    LZ这样不太好啊,用递归,几句代码就OK了。很多事,没那么复杂...
      

  14.   

    只是一个累加求值程序,本来就有现成的公式可以用,本来就不需要用循环。
    1+2+3……100 = 1+100 + 2+99 = (101)*50 = 5050
    function getSum(n){
       if( n % 2 == 1 ){
           return n + (n-1)*n/2;
       }else{
           return (n+1)*n/2;
       }
    }
    alert(getSum(100));
      

  15.   

    新手学编程都有一些疑问,我也同样如此,所以我写这个代码是想告诉大家,写代码动脑思考会让枯燥的代码很有趣,因为那是自己想出来的,即使再差但也能快速提高自己的水平,不信你可以多创造一些与生活方面有关的代码,帮助自己,那样会很有趣。我在4楼也说过了,刚开始的回复还可以,一些回复的“牛”人别TM在这里装B,即使你的水平很高,但你的素质很差
      

  16.   

    对你TM的无语了,你 这个 傻逼看的是 脑残版的还是 幼儿园版的 算法书,你个 小屁孩在这装 什么B。能写算法 书的你以为 就跟你这脑残的水平一样。
      

  17.   

    说真的,我确实也真没见过新手教程中不用FOR循环实现1加到100的,为什么其它“牛人”就不知道去花费你们宝贵的时间去用“小学数序”去想出这一段代码呢?而是普遍新手学习的时候都是FOR循环这种死板的方式。而且我觉得LZ一直在强调的是将思考融入代码中这一个观念,他也并没有显示自己很NB,或是比你们高一等。反倒你们把这个问题放到小学生的水平上,甚至更低,这如果换到是我,我不生气都难。你可以百度搜一下  1加到100
      

  18.   

    不论dreamaodob是不是楼主的马甲,只单说他吧,真算近年来少见的脑残弟了,我之所以上面和现在都要说一下,还是想告诉dreamaodob,你不好好回回炉的话,在社会上根本没法呆,尽管这社会错位现象挺严重,但能给你这么白痴的人有一席之地的可能不大。
      

  19.   

    才看到wochunshabi也在上面说了某些wochunshabi和dreamaodob,基本我可以把你们两个当作一个人吧,因为象你们这样雷人的大脑实在并不多见。所以,一并告诉“你们两个”,老子学算法的时候,你可能还没出生呢。懂不?本来都没有针对楼主去讲实话说你太招笑了点,侧面提醒你一下而已(因为现在脾气好多了),但楼主表现根本无可救药了,那也不怕好好打击你一下,也不是别的,就是告诉你一下实情,你出来混社会,这种智商和情商,就是一个抢劫盗窃的出路,别的实在无法感觉到你能胜任。
      

  20.   

    算了,大家都消消火,本来我是比较欣赏这个代码的,但34楼的unicode的那句话恐怕是导致整个帖子变了性质的吧,他那语言确实挺伤人,我可以理解LZ换马甲来骂,虽然够雷人。因为我曾经有过相同的遭遇,有朋友对我说过类似的话,最后和那人翻脸了。因为这种话语实在是很容易惹人生气,尤其是对方没有那个资格时。
      

  21.   

    foradd(); //用for循环计算
    add();  //等差公式计算function add()
    {var kb=prompt("请输入整数","ok");document.write("开始时间:" +new Date().getTime() + "<br>"); if(!(kb%2))

    var c=(kb/2)*(++kb);
    document.write("1加到"+ --kb+"的值是:");
    document.write(c +"<br>"); }
    else
    {var c=((kb/2-0.5)*(++kb))+(kb/2); 
    document.write("1加到"+ --kb+"的值是:");
    document.write(c +"<br>");}
    document.write("结束时间:" + new Date().getTime() + "<br>");}function foradd()
    {
    var kb=prompt("请输入整数","ok");document.write("开始时间:" +new Date().getTime() + "<br>");var c = 0;
    for(var k=1;k<=kb;k++)
    {
      c += k;
    }
    document.write("1加到"+ kb+"的值是:");
    document.write(c + "<br>");document.write("结束时间:" + new Date().getTime() + "<br>");
    }
    事实上,经过测试,用for循环的计算比用等差公式计算快得多。
    测试数值:1000000
      

  22.   

    补充下,没有对lz不敬的意思。
    事实上,lz思维比较开阔,因为一般我们很少会这样去写以及这样去思考,有点思维定势了,就知道用for了。
      

  23.   

    http://download.csdn.net/source/2736768递归其实很慢, 你试一下上面的fibonacci数列, 当达到50时机子就慢得不行, 而你用循环做, 10000可能都只是一瞬间。写得简单的东西, 并不代表效率就高吧。