zoukankan      html  css  js  c++  java
  • C 求完数 水仙花数 完全平方数 素数 2+22+222... PI

    #include <stdio.h>
    #include <math.h>
    
    void clearYinziArr(int arr[]);
    int aItem(int key, int i);
    int main() {
    
    
    
        //求PI
        //pi=4*(1-1/3+1/5-1/7+1/9-1/11....)
        //本次求PI  直到某一项绝对值小于 10^(-6)
        int sign = 1;//控制正 负
        double fenmu = 1;
        double sum = 0;
        while (fabs(1 / fenmu) > 1e-6) { //fabs是math.h中的函数
            sum += (1 / fenmu * sign);
            sign = -sign;
            fenmu += 2;
        }
        printf("%lf", 4 * sum);
    
        //求完数且输出所有因子
        //它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。
        //输出所有因子  这里用的方式是将每次求出的因子都放在数组中
        int i = 1;
        int yinzi = 1;
        int yinziArr[50];
    
        for (; i < 1000; i++) {
            int yinziSum = 0;
            clearYinziArr(yinziArr);//首先将yinziArr数组各个元素置0
            int yinziArrIndex = 0;//yinziArr数组的下标
    
            for (yinzi = 1; yinzi < i; yinzi++) {
                if (i % yinzi == 0) {
                    yinziSum += yinzi;
                    yinziArr[yinziArrIndex++] = yinzi;//是因子 就把它放入因子数组
                }
            }
    
            if (yinziSum == i) {
                int j = 0;
                for (j = 0; j < yinziArrIndex; j++) {//输出因子
                    printf("%d,", yinziArr[j]);
                }
                printf("   ,%d\n", i);
            }
        }
    
    
        //寻找2--1000的完全平方数
        i=2;
        for(i=2;i<1000;i++){
            int j=0;
            for(j=1;j<i;j++){
                if(j*j==i){
                    printf("完全%d,%d",i,j);
                }
                if(j*j>i){
                    break;
                }
            }
        }
    
        //球水仙花数
        //153=1^3+5^3+3^3
        i = 0;
        for (i = 100; i < 1000; i++) {
            int ge = i % 10;
            int shi = (i / 10) % 10;
            int bai = i / 100;
            //pow(float,float)返回float
            if (i == (pow(ge, 3) + pow(shi, 3) + pow(bai, 3))) {
                printf("%d,", i);
            }
            //虽然是不同类型数值 但是值相同 ==是ok的
            //    int i=1;
            //float f=1.0f;
            //printf("%d,",i==f);//1
        }
    
        //求2+22+222+2222+22222....
        sum = 0;
        i = 0;
        for (i = 0; i < 7; i++) {
            sum += aItem(2, i);
        }
        printf("\n%d\n", sum);
    
        //求素数
        //如果一个数能被2~√m 中任意一个数字整除  那么它不是素数
    
        i = 0;
        for (i = 2; i < 200; i++) {
            int flag = 1;
            int k = sqrt(i);
            int j = 0;
            for (j = 2; j <= k; j++) {//注意 分母不能从0开始
                if (i % j == 0) {
                    flag = 0;
                }
            }
            if (flag) {
                printf(",%d,", i);
            }
        }
    
        //求阶乘的和
        //1!+2!+3!+4!...
        //如果是使用递归 那么需要2个函数,一个计算每一项的值  一个计算和
        //所以还是用循环好了
        sum=0;
        int item=1;
        for(i=1;i<5;i++){//求前8项的和
            int j=1;
            for(j=1;j<=i;j++){
                item*=j;
            }
            sum+=item;
        }
        printf("sum:%d",sum);
    
        return 1;
    
    }
    
    void clearYinziArr(int arr[]) {
        int i = 0;
        for (; i < 50; i++) {
            arr[i] = 0;
        }
    }
    
    int aItem(int key, int i) {
        int s = key;
        int j = 1;
        while (j <= i) {
            s = s * 10 + key;
            j++;
        }
        printf("-%d,", s);
        return s;
    }
  • 相关阅读:
    Oracle数据库中心双活之道:ASM vs VPLEX
    使用Visual C ++和Open Folder自定义环境
    HDU 2563 统计问题(递归,思维题)
    彻底搞定C语言指针(精华版)
    HDU 1000 A + B Problem(指针版)
    图的基本算法(BFS和DFS)
    HDU 1312 Red and Black(DFS,板子题,详解,零基础教你代码实现DFS)
    C语言求最小公倍数和最大公约数三种算法(经典)
    HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
    HDU 2502 月之数(二进制,规律)
  • 原文地址:https://www.cnblogs.com/cart55free99/p/2981628.html
Copyright © 2011-2022 走看看