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;
}

 

posted @ 2013-03-25 22:33  cart55free99  阅读(306)  评论(0编辑  收藏  举报