C++ 检查一个数字的末尾是否为另一个数字
一个典型的编程挑战是确定一个数字是否以另一个数字结尾。为了解决这个问题,你需要识别给定数字的最后几位,并检查它们是否与另一个数字匹配。许多应用程序,包括数据处理、字符串操作和数值分析,经常涉及这种操作。解决这个挑战使用了将数字转换为字符串、模数运算和逻辑运算符的编程方法。对于想要更好地操作数字和解决算法问题的初学者和中级程序员来说,这个主题应该是有兴趣的。
方法
有各种方法可以检查一个数字的末尾是否为另一个数字。下面是两种常见的方法:
- 使用模数运算符(%)
-
使用字符串转换
方法1:使用模数运算符(%)
如果两个数字相除,模数运算符返回余数。使用第二个数字作为除数,利用模数运算符可以确定一个数字是否以另一个数字结尾。如果结果等于第二个数字,则第一个数字以第二个数字结尾。
被称为模数的常用数学运算符返回除法运算的余数,用符号%表示。验证一个数字是否以另一个数字结尾是模数运算符的一个有用应用。
我们可以使用模数运算符获取将一个数字“n”除以另一个数字“m”后的剩余值,以确定这两个数字是否是连续的。如果余数等于m,则n以m结尾;如果不等于m,则不是。
语法
这种方法的语法如下:
- 用于检查数字是否以另一个数字结尾的函数
bool endsWith(int number, int ending) {
int digits = floor(log10(ending)) + 1;
- 获取最后一个数字的位数
int divisor = pow(10, digits);
- 计算除数
int remainder = number % divisor;
- 计算余数
return remainder == ending; }
- 如果余数等于结束数字,则返回 true
这里, number 是原始数字, ending 是要检查是否位于 number 的末尾的数字。 表达式 floor(log10(ending)) + 1 计算 ending 的位数,并且 pow(10, digits) 计算除数。使用取模运算符 % 计算 number 除以 divisor 的余数。如果余数等于 ending ,则函数返回 true,表示 number 结尾是 ending 。
步骤
以下是使用取模运算符来判断一个整数是否以另一个数字结尾的 C++ 过程 −
步骤 1 − 输入 num 和 endNum 两个要比较的数字。
步骤 2 − 使用取模运算符 % 计算 num 除以 10 的余数。
步骤 3 − 如果数字以 endNum 结尾并且余数等于 endNum,则返回 true。
步骤 4 − 如果不是,则将数字除以 10,并重复步骤 1-2,直到数字等于 0。
步骤 5 − 如果循环在没有匹配的情况下结束,则数字不是以 endNum 结尾,因此返回 false。
示例1
使用取模运算符检查一个数字是否以另一个数字结尾的示例 −
此示例中的 endsWith 函数接受两个整数参数 number 和 ending。然后使用取模运算符 % 来确定数字的最后一位是否等于 ending。如果是,则函数返回 true;如果不是,则返回 false。
在调用 endsWith 方法之前,我们首先在主函数中定义 number 和 ending。如果方法返回 true,则打印一条消息表示数字以 ending 结尾。如果不是,则打印一条消息表示数字不以 ending 结尾。
需要注意的是,这只是一个非常简单的示例,有许多不同的方法(如字符串操作方法)可以确定一个数字是否以另一个数字结尾。取模运算符是一种常用且有效的技术。
#include <iostream>
using namespace std;
bool endsWith(int number, int ending) {
return (number % 10) == ending; // Check if last digit is equal to ending
}
int main() {
int number = 12345;
int ending = 5;
if (endsWith(number, ending)) {
cout << number << " ends with " << ending << endl;
}
else {
cout << number << " does not end with " << ending << endl;
}
return 0;
}
输出
12345 ends with 5
方法2:使用字符串转换
使用字符串操作函数,这种技术通过将两个整数转换为字符串来检查它们的末尾是否匹配。一个典型的方法是使用to_string()函数将数字转换为字符串,然后找到第一个字符串的最后几个字符是否与第二个字符串的最后几个字符匹配。
语法
以下是在C++中检查一个数字是否以另一个数字结尾的字符串转换方法的语法,不包含实际代码。
- 将数字转换为字符串
string num1_str = to_string(num1);
string num2_str = to_string(num2);
- 检查字符串的最后字符是否相等
bool ends_with = num1_str.substr(num1_str.size() - num2_str.size()) == num2_str;
步骤
这是一个C++算法,用于确定一个数字是否以另一个数字结尾−
步骤1 −首先创建两个整数的字符串。
步骤2 −假设第二个整数为n,确定其长度。
步骤3 −如果第一个数字的长度小于n,则返回false。
步骤4 −对第一个数字应用substr方法,提取最后n位数字。
步骤5 −对第二个数字和提取的子字符串应用stoi方法,转换为整数。比较两个整数。
步骤6 −如果它们相等,则返回true。否则,返回false。
示例2
使用to_string()函数将两个数字转换为字符串。然后使用substr()函数提取第一个字符串的最后几个字符,使其与第二个字符串的长度匹配。然后使用==
运算符将这些提取的字符与第二个字符串进行比较。
#include <iostream>
#include <string>
using namespace std;
int main() {
int num1 = 123456;
int num2 = 56;
string str1 = to_string(num1);
string str2 = to_string(num2);
if (str1.substr(str1.length() - str2.length()) == str2) {
cout << "Number 1 ends with number 2" << endl;
} else {
cout << "Number 1 does not end with number 2" << endl;
}
return 0;
}
输出
Number 1 ends with number 2
结论
总之,使用substr()函数比较每个字符串的最后几个字符,或者使用模运算来分离每个数字的最后几位数并直接进行比较,都是在C++中判断一个数字是否以另一个数字结尾的两种方法。这两种策略都非常有效,并且可以使用基本的C++编程结构进行实践。许多需要模式匹配的数字和计算应用都可以从这个任务中受益。