C++入门题_反转数字的核心逻辑

1. 示例回文数

例如寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数Palindrome 。回文:各位数字左右对称的整数。

2. 实现分析

isPalin函数

  判断一个整数是否是回文数,将数字反转并与原始数字比较确定

主程序逻辑

  从 11 遍历到 999,计算每个数的平方和立方
   对每个数 m,调用 isPalin 来判断 m、m² 和 m³ 是否都是回文数
   如果满足条件,输出该数及其平方和立方
#include <iostream>
using namespace std;

//判断是否为回文数
bool isPalin(int num)
{
	int reversed = 0, original = num;

	//反转数字
	while (num > 0)
	{
		reversed = reversed * 10 + num % 10;
		num /= 10;
	}

	//判断反转后的数与原始数是否相同
	return original == reversed;
}

int main()
{
	int m;
	//遍历11到999之间的数
	for (m = 11; m <= 999; m++)
	{		
		//检查m,m2,m3是否均为回文数
		if (isPalin(m) && isPalin(m * m) && isPalin(m * m * m))
		{
			cout << "\nm = " << m << endl;
			cout << "m^2 = " << m * m << endl;
			cout << "m^3 = " << m * m * m << endl;
		}
	}	
	return 0;
}

3. 反转数字的核心逻辑

num % 10,

获取当前数字的最后一位, 如果 num = 189,那么 189 % 10 = 9

reversed * 10 + num % 10

提取的数字( num % 10)加到 reversed 的末尾,构成反转的过程

在 reversed 中存储了已经反转过的数字,所以每次将新的一位数字加到反转数的末尾时,先将 reversed 扩大10倍,这样新数字才能加到最末位,例如,假设 reversed = 12,我们再加上新的一位数字 3,先把 12 变为 120,然后再加上 3,变为 123

num /= 10

去掉已经处理过的数字,将 num 右移一位
例如,如果 num = 1234,执行 num /= 10 后,num 将变为 123

在前面进制转换我们也看到过这些用法

该过程完整的循环例子

假设想反转数字749
初始
num = 749,reversed = 0

第 1 次循环
提取,num%10, 749%10=9;
更新reversed, reversed = 0*10 +9 = 9
更新num, num= 749 /10 =74

第 2 次循环
提取,num%10, 74 % 10 = 4;
更新reversed, reversed = 9 *10 + 4 = 94
更新num, num= 74 /10 =7

第 3 次循环
提取,num%10, 7 % 10 = 7;
更新reversed, reversed = 94 *10 + 7 = 947
更新num, num= 7 /10 = 0

num 变成了 0,while 循环结束,此时 reversed 的值为 947,即为 749 的反转数

完成数字反转后,就可以将 reversed 与原始的 num 进行比较

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dotdotyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值