huanganan 发表于 2021-10-28 13:35:07

循环语句

1:水仙花数是指一个n位的正整数,它的各位数字的n次幂之和等于它本身,求100—999之间的所有水仙花数。输入:无;输出:每个水仙花数用“,”分割。
2:展开式求和,输入一个实数x,计划并输出s={1+x+x*2/2!+x*3/3!+x*4/4!+.......},直到最后一项的绝对值小于0.00001,计算结果保留小数点后五位。不要用fact函数和pow函数,直接计算,输入:实数x;输出:s=?

jackz007 发表于 2021-10-28 14:25:56

本帖最后由 jackz007 于 2021-10-28 14:34 编辑

【第1题】:
#include <stdio.h>

int main(void)
{
      int c , d , k , s                                                            ;
      for(c = 0 , d = 100 ; d < 1000 ; d ++) {
                for(s = 0 , k = d ; k ; k /= 10) s += (k % 10) * (k % 10) * (k % 10) ;
                if(s == d) {
                        if(c) printf(" , ")                                          ;
                        printf("%d" , d)                                             ;
                        c ++                                                         ;
                }
      }
      if(c) printf("\n")                                                         ;
}
      编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
153 , 370 , 371 , 407

D:\0002.Exercise\C>
【第2题】:
#include <stdio.h>

int main(void)
{
      double d , e , x , s                               ;
      unsigned long long i , k , m                     ;
      scanf("%lf" , & x)                                 ;
      for(s = e = k = 1 ; e >= 0.00001 ; k ++) {
                for(m = 1 , i = k ; i ; m *= i , i --)   ; // m = k !
                for(d = 1 , i = 0 ; i < k ; d *= x , i ++) ; // d = x ^ k
                e = 1.0 * d / m                            ;
                s += e                                     ;
      }
      printf("%.5lf\n" , s)                              ;
}
      编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
1.8
6.04965

D:\0002.Exercise\C>

傻眼貓咪 发表于 2021-10-28 15:31:24

#include <stdio.h>
#include <stdbool.h>

bool isNarcissistic(int n)
{
    int a, b, c;
    a = n/100;
    b = (n%100)/10;
    c = n%10;
    return a*a*a + b*b*b + c*c*c == n;
}

int main()
{
    for(int i = 100; i <= 999; i++){
      if(isNarcissistic(i)){
            printf("%d\n", i);
      }
    }
    return 0;
}153
370
371
407

#include <stdio.h>

double f(int n){
    double res = 1;
    for(int i = n; i > 0; i--){
      res *= i;
    }
    return res;
}

double formula(double x){
    double sum = 1;
    for(int i = 1; (i*x)/f(i) >= 0.00001; i++){
      sum += (i*x)/f(i);
    }
    return sum;
}


int main()
{
    double x;
    scanf("%lf", &x);
    printf("%.5lf", formula(x));
    return 0;
}5
14.59141

qq1151985918 发表于 2021-10-28 16:07:41

本帖最后由 qq1151985918 于 2021-10-28 16:10 编辑

def isFlower(num):
    r = 0
    n = len(str(num))
    for i in str(num):
      r += int(i) ** n
    return True if r == num else False

print(",".join())

def refact(num):
    r = 1
    for i in range(num, 0, -1):
      r *= i
    return r

def getsum(x):
    s = t = 1
    n = x
    while abs(n) >= 0.00001:
      s += n
      t += 1
      n = x * t / refact(t)
    return round(s, 5)

print(getsum(5))
页: [1]
查看完整版本: 循环语句