9.4代码题,9.5默写版本

#include 
#include 
#include 

int f1(int num);
int po(int num,int n);
int main() {
    int num;
    printf("输入一个整数:");
    scanf("%d", &num);
    int res = f1(num);
    printf("res:%d", res);
}

// 1.输入一个整数,求整数各个 位数之和如1234(各个位
//  数之和为1+2+3+4=10
int f1(int num) {
    int sum = 0;
    // 1.只需每次循环取得最后一个数字累加,然后/10缩小即可
    while (num > 0) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

// 2.判断是否是质数(元素只有1和本身)
int f2(int num) {
    int flag = 0, i, j;
    for (i = 2; i < num; i++) {
        if (num % i == 0)
            return 0; //不是质数
    }
    return 1; //是质数
}

// 3.计算奇数之和
int f3(int num) {
    int res = 0, i;
    for (i = 1; i <= num; i++) {
        if (i % 2 == 1) { //说明i是奇数
            res += i;     //是奇数就进行累加
        }
    }
    return res;
}

// 5.计算奇数之和,奇数列中的偶数个为负数
int f4(int num) {
    int res = 0, i,
        count = 1; // i用来遍历序数,count用来记录奇数列中的偶数奇数位
    for (i = 1; i <= num; i++) {
        if (i % 2 == 1 &&
            count % 2 == 1) { //当遍历到i为奇数,且为第奇数位时,加正数
            res += i;
            count++;
        } else if (i % 2 == 1 &&
                   count % 2 == 0) { // i为奇数且i为奇数列中的偶数位
            res += (0 - i);          //对偶数位的奇数取相反数
            count++;
        }
    }
    return res;
}

// 6.计算奇数的倒数之和,且关联所在奇数列的奇偶位
int f5(int num) {
    int res = 0, i,
        count = 1; // i用来遍历数列寻找奇数,count用来计算奇数所在奇位还是偶位
    for (i = 1; i <= num; i++) {
        if (i % 2 == 1 && count % 2 == 1) { //当i为奇数,且位为奇数位时
            res += 1 / i;                   //加正数
        } else if (i % 2 == 1 &&
                   count % 2 == 0) { //当i为奇数,且位为偶数位时,res加倒负数
            res += 1 / (0 - i);
        }
    }
    return res;
}

// 6.计算n的阶乘
int f6(int n) {
    if (n == 1) {
        return n;
    }
    return n * f6(n - 1);
}

// 7.计算阶乘之和在主方法中加一个for循环即可

// 8.编程计算5+55+555+5555+55555之和
int f8(int num, int count) { //输入5:代表5个5的和,从1个5加到5个5
    //用递归思考:1.下一个=上一个*10+5(方程)2.结束为第一个也就是5(count控制次数,count初始与num同值)
    if (count == 1) {
        return num;
    }
    return f8(num, count - 1) * 10 + num;
}

// 9.计算水仙花数:(三位数的³和等于本身)
void isSx(int num) { // num以内的数输出满足所有的水花
    int i;
    for (i = 100; i < num; i++) {
        // 1.首先取得当前i所有的位
        int d1 = i % 10;      //个位
        int d2 = i / 10 % 10; //十位
        int d3 = i / 100;     //百位
        // 2.进行判断
        if (d1 * d1 * d1 + d2 * d2 * d2 + d3 * d3 * d3 == i) { //满足水仙花
            printf("%-5d", i);
        }
    }
}

// 10.将整数倒序输出
int reverse(int num) {
    int new_num = 0;
    int len;
    //1.首先计算num的位数
    while(num>0){
      num/=10;
      len++;
    }
    while (num > 0){
        new_num+=(num%10)*po(10,len);// 首先得到num的个位作为newnum的最高位:num%10*10^(len-1)
        num/=10;
        len--;
    }
    return new_num;
}

int po(int num,int n){ //num表示底数,n表示次数
   for(int i=0;i<n;i++){
       num=num*num;
   }
   return num;
}

//11.判断回文数
int isHw(int num){
  //1.首先将num转为字符串
  char str[20];
  sprintf(str, "%d", num);
  int left=0,right=strlen(str)-1; //strlen:字符数,不算结尾的\0;sizeof:字节数,算结尾的\0 
  //2.进行遍历
  while(left<right){
      if(str[left]!=str[right]) { //找到不相等的元素返回0
          return 0;
      }
      left++;
      right--;
  }
  return 1; //left与right的每一位元素都相等
}

你可能感兴趣的:(算法)