ヅCleverザ 发表于 2014-3-30 11:24:50

s=2^2!+3^2!怎么理解?

#include <stdio.h>


long square(int p);
long factorial(int q);
void main()
{
        int i;
        long s=0;
        for(i=2;i<=3;i++)
        {
                s=s+square(i);
        }
        printf("%ld\n",s);
       
}
long square(int p)
{
        int k;
        long r;
        long factorial(int);
        k=p*p;
        r=factorial(k);
        return r;
}
long factorial(int q)
{
        long c=1;
        int i;
        for(i=1;i<=q;i++)
        {
                c+=i;
        }
        return c;


}

CL0419 发表于 2014-3-30 11:24:51

看这位鱼友想表达的是,先用这个没有含有他问题的代码然后引出他想要问的问题,果然是一招投石问路的好方法。像这位鱼友的问题为:s = 2^2 + 3^2是怎么理解的,其实不难,首先你要明白各运算符号之间的优先级,在你的这个问题中,^运算符的优先级低于+运算符,所以先进行3+2运算为5,然后语句变为s = 2^2^5,然后又知道^异或是这样的:相同位为零,不同位为1,所以上述式子s = 2^5^2为:
s = 0000 0010 ^ 0000 1001 ^ 0000 0010,如果你发现了式子中其中2^2的 0 1表示是相同的,所以首先2^2=0,然后拿0^5= 0000 0000 ^ 0000 1001,最后结果为s = 5。
不知道我的解答你懂了没有?如果懂了明白了,请大力并且拼命的点赞,至于为什么,你懂的……:lol:

青玄 发表于 2014-3-30 11:49:08

朋友!你说的这个 s=2^2!+3^2!;程序中没有啊!

hanhaochi 发表于 2014-3-30 20:45:08

!非运算优先等级最高,不过一般用法是   !表达式 ……也不知道你这个怎么会放后面了…… 优先级看的话,先!   再+    最后按位异或完事了赋值   ……

zhdw 发表于 2014-3-30 21:05:45

2的平方的阶乘 就是 4的阶乘就是 4*3*2*1=24

egbert 发表于 2014-3-31 12:28:48

学习一下 这真不熟悉

一个人的精彩 发表于 2014-3-31 17:30:30

s=2^2!+3^2!,^这个不是异或优先级符号,是求2的平方的阶乘+3的平方的阶乘。
进入for循环,i=2,先调用square(i)求出2的平方,再调用factorial(k)求出4的阶乘。当i>3时,退出for循环。

CL0419 发表于 2014-3-31 19:06:50

一个人的精彩 发表于 2014-3-31 17:30 static/image/common/back.gif
s=2^2!+3^2!,^这个不是异或优先级符号,是求2的平方的阶乘+3的平方的阶乘。
进入for循环,i=2,先调用s ...

那如果像你说的那样,那你求出的结果是多少??

一个人的精彩 发表于 2014-4-1 10:05:16

4!=24,9!=362880。4!+9!=362904。

欣欣celin 发表于 2014-4-5 19:54:48

偶来也{:5_109:},调试了N久才找到POINT------
#include <stdio.h>
#include <math.h>

long square(int p);   //声明求平方的函数square
long factorial(int q);//声明求阶乘的函数factorial

void main()
{
      int i;          //定义整型变量i
      long s=0;       //定义长整变量s,并赋值
      for(i=2; i<=3; i++)       //进入for循环
      {
                s = s + square(i);//在等式中调用函数square
      }
      printf("%ld\n",s);      //输出2^2! + 3^2! 的结果
      
}
long square(int p)      //定义函数square, 在此p=i,
{
      int k;
      long r;
      long factorial(int);      //声明求阶乘的函数factorial,此句可省略,因在开头已经声明过了
      k = p * p;      // 相当于k=i*i,即平方
      r=factorial(k);   
      //调用阶乘函数factorial,
      return r;       //返回r的值给s=s+square(i);
}
long factorial(int q)   //定义函数factorial, 在此q=k,
{
      long c=1;
      int j;          //之所以把i改成j,是为了更易在调试中看懂^^,不改也没问题嘀
      for(j=1; j<=q; j++)//进入for循环
      {
                c += j;       //此句要改为c *= j, 否则结果是57,而不是4!+9!=362904
                              //相当于计算c=4*3*2*1 及 c=9*8*7*6*5*4*3*2*1
      }
      return c;       //返回c的值给r=factorial(k);


}
{:7_183:}终于交到功课了,嘻嘻

牡丹花下死做鬼 发表于 2014-4-5 20:06:12

这个程序中有2^2!+3^2!么????
在C中!是非的意思但不可能写成2^2!这样 数学中!是阶乘
比如4! = 4 * 3 * 2 * 1
2^2! = 4! 懂??
求阶乘的程序的话#include<stdio.h>

long int fac(int i);//我是用递归求法

int main()
{
        int i;
        printf("Please Input a number:");
        scanf("%d",&i);
        printf("%d! = %ld\n",i,fac(i));

        return 0;
}
long int fac(int i)
{
        if(1 == i)
        {
                return i;
        }
        else
        {
                return i * fac(i - 1);
        }
}

那年`逝去 发表于 2014-4-5 22:19:59

看看。帮顶下
页: [1]
查看完整版本: s=2^2!+3^2!怎么理解?