您的位置:首页 > 其它

C 求完数 水仙花数 完全平方数 素数 2+22+222... PI

2013-03-25 22:33 253 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: