当前编程题:考试题---逆序乘积式 |
47. | 【问题描述】 若两个正整数的乘积,等于两正整数各自逆序后的乘积,则称其为逆序乘积式。编写程序读入两个正整数,然后判断这两个正整数能否构成逆序乘积式。假设两个正整数的乘积不会超过int数据类型的表示范围。 【输入形式】 从控制台输入以一个空格分隔的两个正整数。 【输出形式】 若两个正整数能够构成逆序乘积式,则输出两个正整数及其逆序的乘积形式,并且中间用一个等号相连;若不能构成逆序乘积式,则输出两个正整数及其逆序的乘积形式,并且中间用一个不等号相连。 【样例输入1】 12 693 【样例输出1】
扫描二维码关注公众号,回复:
2139943 查看本文章
12*693=21*396 【样例1说明】 输入的两个正整数为12和693,其乘积为8316。将这两个正整数逆序后分别为21和396,其乘积为8316。两者乘积相等,所以输出12*693=21*396。 【样例输入2】 185 1300 【样例输出2】 185*1300!=581*31 【样例2说明】 输入的两个正整数为185和1300,其乘积为240500。将这两个正整数逆序后分别为581和31,其乘积为18011。两者乘积不相等,所以输出185*1300!=581*31。 |
解题思路与易错分析:
这道题不难,其实就是关于数的逆序数(这里不是线性代数中的逆序数)就是顺序反一下,关于这个的处理有很多种,但这里说的是我认为简单的方法,用string储存数字然后用string下的函数使其反转然后在将其转化为int类型,这里你可能会觉得好麻烦,但是你如果就用int储存后在倒序,这里还有一个坑就是关于0的处理,也就是你在拆分数字的时候关于0的处理,这个问题才是真麻烦,这里用到的将string转化为int的方法,
详情可以 https://blog.csdn.net/qq_41682681/article/details/80772469
用string转化为int可以避免处理关于0是否在最高位和在倒序的问题
下面附上我的代码:
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdlib>
using namespace std;
int re(string &a)
{
reverse(a.begin(),a.end());
return atoi(a.c_str());
}
int main()
{
string a,b,c,d;
int e,f,g,i;
cin >> a >> b;
c = a;
d = b;
e = atoi(a.c_str());
f = atoi(b.c_str());
g = re(a);
i = re(b);
cout << e << "*" << f;
if(e*f==g*i)
{
cout << "=";
}
else
{
cout << "!=";
}
cout << g << "*" << i;
}