题目描述
小华的寒假作业上,有这样一个趣味填空题:
给出用等号连接的两个整数,如“1234=492”。当然,现在这个等式是不成立的。
请你在等号左边整数中的某个位置尝试插入一个乘号,看有没有可能让等式成立。以上
面的式子为例,如果写成 1234=492,这样就正确了。
现在请你编写一个程序来解决它。
输入
输入只有那个不成立的等式,且等号两边的整数均不会超过
2000000000。
输出
输出只有一行。如果存在这样的方案,请输出那个正确的式子;如果
不存在解决方案,请输出“Impossible”(引号中的部分)。
样例输入 Copy
1234=492
样例输出 Copy
1234=492
提示
测试数据保证不会出现多个解决方案
题意
给出一个只包含数字和一个 =
的字符串,在 =
左侧适当位置插入 *
使得等式成立,保证不会出现多种符合要求的方案,要求输出该方案,否则输出“Impossible”
分析
直接枚举 *
的位置,然后判断等式是否成立即可
首先通过找到 =
所在的位置,
int p = s.find('=');
然后在[1,p)区间上枚举 *
的位置i,(表示在i的前面插入 *
),
for(int i = 1;i < p;i++) {}
然后通过字符串截取函数截取出三个字符串a,b,c,即a * b 是否 等于 c
string a = s.substr(0,i),b = s.substr(i,p - i),c = s.substr(p + 1,s.size() - p - 1);
之后将字符串转换成整数,判断等号是否成立
if(stoll(a) * stoll(b) == stoll(c)){
cout << a << '*' << b << '=' << c;
st = true;
break;
}
代码
#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
ios::sync_with_stdio;
cin.tie(0),cout.tie(0);
cin >> s;
int p = s.find('=');
bool st = false;
for(int i = 1;i < p;i++){
string a = s.substr(0,i),b = s.substr(i,p - i),c = s.substr(p + 1,s.size() - p - 1);
if(stoll(a) * stoll(b) == stoll(c)){
cout << a << '*' << b << '=' << c;
st = true;
break;
}
}
if(!st) cout << "Impossible";
return 0;
}
标签:输出,int,题解,substr,stoll,等式,趣味,填空,492
From: https://blog.csdn.net/qq_73162098/article/details/144494604