2-4、C语言解决回文数

46 阅读4分钟

回文数: 将自然数n的各位数字反向排列得到自然数n1,若n1与n相等,则称n为回文数,例如: 12321

/**
 *    #include <stdio.h>是C语言中的一个预处理指令,
 * 它告诉C编译器在编译时包含stdio.h头文件。
 *
 *    stdio.h是C标准库(Standard Library)中的一个头文件,
 * 它提供了输入和输出的函数和宏定义。
 * 通过包含stdio.h头文件,
 * 您可以使用标准输入输出函数(如printf和scanf)来进行屏幕输入和输出。
 */

#include <stdio.h>
// 使用该头文件中定义的各种数学函数
#include <math.h>

// 得到长度
int getLength(long int num) {
  int found, len;
  found = 0;
  //  设定正整数num的位数小于或等于10
  len = 10;

  if (num == 0) return 1;

  while (found == 0) {
    // pow(10,len-1) : 计算10的len-1次幂
    // 此处int : 将 pow(10, len - 1 )强制转换成int类型
    if (num / (int)pow(10, len - 1) > 0)
      found = 1;
    else
      len = 1;
  }
  // 返回num的位数
  return len;
}

// 是否是回文数
int isPalindrome(long int num) {
  // 键盘输入的正整数
  long int n;

  // 正整数最左边的数字
  int left;

  // 正整数最右边的数字
  int right;

  // 正整数的位数
  int i;

  // 是否是回文数, 是:1   否:0
  int flag;

  i = getLength(num);
  n = num;
  flag = 0;
  while (i > 1 && flag == 0) {
    // 将正整数n当前最左边的数字赋予变量left
    left = n / (int)pow(10, i - 1);

    // 将正整数n当前最右边的数字赋予变量right
    right = n % 10;

    n = n % (int)pow(10, i - 1) / 10;
    i -= 2;
    //   若正整数n当前是最左边和最右边的数字不相等,
    //   则不是回文数,
    //   即标志变量flag赋值1
    if (left != right) flag = 1;
  }

  // 若是回文数,则返回1
  if (flag == 0) return 1;

  //   若不是,则返回0
  else
    return 0;
}

// 主函数
int main(void) {
  long int num;
  // 从键盘输入一个正整数保存到变量num中
  scanf("%ld", &num);
  if (isPalindrome(num))
    printf("%ld 是个回文数\n", num);
  else
    printf("%ld 不是个回文数\n", num);
  return 0;
}

以上是一个C程序,我们可以总结一下一个C程序由哪些部分组成

C程序的组成特点:

1、由一个或多个函数组成

//上面的有三个函数
int getLength(){}

int isPalindrome(){}

int main(){}

2、函数是C程序的基本单位

函数由两部分组成,函数首部、函数体。

函数首部由以下构成


int main(long int num){}

int :返回值类型
main :函数名
long int:形式参数类型
num:形式参数名

若没有参数,则直接写void
int main(void){}

函数体及花括号{}里面的内容

3、C程序中每个语句都以分号 ;结束,除了以下几个情况:

预处理命令、函数首部、右花括号 } 后

4、C语言本身没有输入、输出语句,而是通过调用库函数实现的

//获取用户输入的数据,并相应地保存到变量列表中
//语法:scanf("%格式化字符串", 变量列表);
scanf()

//将格式化后的字符串输出到标准输出
//printf("%格式化字符串", 输出表列)
printf()

//从输入缓冲区里面读取一个字符,
//一次只能读取一个字符,
//第一次getchar()时,确实需要人工的输入,
//但是如果你输了多个字符,
//以后的getchar()再执行时就会直接从缓冲区中读取了
//语法:getchar()
getchar()

//输出字符,返回值是参数的ASCLL码值
//语法:putchar(参数)
putchar()

5、C程序的任意位置都可以写注释

单行注释 //
多行注释 /* */

6、可以一行内写多条语句,也可以一条语句写多行

7、从主函数开始、从主函数结束 main

8、可以有预处理命令,写在最前面

9、主函数可以调用其它函数,其它函数可以相互调用,但不能调用主函数


我是自学前端的,下班后学习,我是2022年11月21号进前端的,已经一年一个月了,现在正在自考湘潭大学的计算机专业大专,这是《高级语言程序设计》,希望学完后,对我日后的计算机之路有所帮助。加油!!!

我进前端的路不是很容易,但我并不因此退缩,我是一个比较笨的人,但我依然希望通过自己的努力去过上自己想要的生活,我热爱计算机,我愿意为此付出巨大努力,并不懈地坚持