【算法】回文数

目录

一.回文数

二.求回文数(10000以内)

代码:

翻译:

调试:

三.判断回文数

代码:

 调试:


一.回文数

"回文数"是一种数字。

如:12321, 这个数字正读是12321,倒读也是12321,正读倒读一样

二.求回文数(10000以内)

代码:

#include <stdio.h>  // 标准输入输出库,提供文件操作、屏幕输出等函数
#include <stdlib.h> // 标准库,提供内存分配、随机数等函数

int main() {
    int num, reverse_num, remainder; // 定义整型变量

    for(num = 0; num < 10000; num++){  // 从 0 开始循环至 9999

        int temp = num;  // 临时变量,用于计算反转后的数值

        reverse_num = 0; // 反转数字初始化为 0

        while(temp != 0){ // 当临时变量不为 0 时,执行以下操作
            remainder = temp % 10; // 取临时变量的个位数值
            reverse_num = reverse_num * 10 + remainder; // 将反转数乘10加上余数得到新的反转数
            temp /= 10; // 临时变量右移 1 位
        }

        if(reverse_num == num){ // 如果反转后的数值等于原数值,输出该数值
            printf("%d ", num);
        }
    }
	system("pause");
    return 0;
}

while(temp != 0){

// 当临时变量不为 0 时,执行以下操作
            remainder = temp % 10;

// 取临时变量的个位数值
            reverse_num = reverse_num * 10 + remainder;

// 将反转数乘10加上余数得到新的反转数
            temp /= 10;

// 临时变量右移 1 位
        }

翻译:

这段代码的意思是将一个数进行反转,比如对12345进行反转,得到54321,再来比较12345

和54321是否相等,如果相等则该数为回文数,所以这段代码主要求解一个数的反转数。

举例:

假设对54321进行反转,初始状态如下:

temp=54321;

reverse_num=0

remainder=0

第一步:

进入循环,判断temp是否为0,若temp不为0进行如下操作:

remainder=temp%10  (取temp的个位数)即remainder=1

reverser_num=0*10+1 (得到反转数)即reverser_num=1

temp/=10  (临时变量右移一位)即temp=5432

第二步:

第一次循环结束,进入第二次循环(temp=5432)

remainder=temp%10  (取temp的个位数)即remainder=2

reverser_num=1*10+2 (得到反转数)即reverser_num=12

temp/=10  (临时变量右移一位)即temp=543

第三步:

第二次循环结束,进入第三次循环(temp=543)

remainder=temp%10  (取temp的个位数)即remainder=3

reverser_num=12*10+3(得到反转数)即reverser_num=123

temp/=10  (临时变量右移一位)即temp=54

第四步:

第三次循环结束,进入第四次循环(temp=54)

remainder=temp%10  (取temp的个位数)即remainder=4

reverser_num=123*10+4(得到反转数)即reverser_num=1234

temp/=10  (临时变量右移一位)即temp=5

第五步:

第四次循环结束,进入第五次循环(temp=5)

remainder=temp%10  (取temp的个位数)即remainder=5

reverser_num=1234*10+5(得到反转数)即reverser_num=12345

最终用反转数12345与54321进行比较,看是否相等

调试:

三.判断回文数

代码:

#include <stdio.h>

int main() {
    int num, reversedNum = 0, remainder, originalNum;

    printf("请输入一个整数:");
    scanf("%d", &num);

    originalNum = num;

    while (num != 0) {
        remainder = num % 10;
        reversedNum = reversedNum * 10 + remainder;
        num /= 10;
    }

    if (originalNum == reversedNum) {
        printf("%d是回文数。\n", originalNum);
    }
    else {
        printf("%d不是回文数。\n", originalNum);
    }
	system("pause");
    return 0;
}

 调试:

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值