3 条题解
-
3
已AC-------
本题不得不承认--------
不适合字符串初学者-----
虽然是本题最短的ac题解,但是真的不简单啊!!!
初学者必看(详细)
//主要函数:s.find(“要找的字符串”) 作用:找到该子串第一次出现的下标 //s.substr(下标,长度)作用:从传的下标开始截取相应的长度 //s.substr(下标)作用:从传的下标开始截取到该字符串最后 #include <bits/stdc++.h> using namespace std; string s,s1,s2;//定义字符串 int x,y,z;//存储的分别是--x,y=加数--z=和 int main(){ cin>>s; s1=s.substr(0,s.find('='));//截取=前面的字符串(x与y加数) s2=s.substr(s.find('=')+1);//截取等于后面的字符串(z和) //cout<<s1<<" "<<s2;调试 z=stoi(s2);//stoi(string s) 将字符串s转换成对应的int类型 //拓展:stoll(string s)将字符串s转换成对应的long long类型 //stof(string s)将字符串s转换成对应的float类型 for (int i=0;i<(int)s1.size();i++){//循环求解 x=stoi(s1.substr(0,i+1));//将s1逐个逐个分解并转成数字-如下: //1234->1+234->12+34->123+4🎉️ y=stoi(s1.substr(i+1)); if (x+y==z){//相加若等于s2 cout<<x<<'+'<<y<<'='<<s2;//输出 exit(0);//停止程序!!!! } } cout<<"Impossible!";//没有答案,按题目要求输出字符串 return 0; }
代码如下
#include <bits/stdc++.h> using namespace std; string s,s1,s2; int x,y,z; int main(){ cin>>s; s1=s.substr(0,s.find('=')); s2=s.substr(s.find('=')+1); z=stoi(s2); for (int i=0;i<(int)s1.size();i++){ x=stoi(s1.substr(0,i+1)); y=stoi(s1.substr(i+1)); if (x+y==z){ cout<<x<<'+'<<y<<'='<<s2; exit(0); } } cout<<"Impossible!"; return 0; }
还不会的话,看下面代码
#include <bits/stdc++.h> using namespace std; int main(){ cout<<"12+3=15"; return 0; } //已AC,放心食用
可以走了,赞👍 留下!!!
-
3
#include <bits/stdc++.h> using namespace std; bool j; long long l1,l2,num1,num2,num3; int main() { string s1,s2; char c; while (cin >> c) { if (c == '=') { j = 1; } else { if (j) { l2++; s2 += c; } else { s1 += c; l1++; } } } for (int i = 0;i < l2;i++) { num3 = num3 * 10 + s2[i] - '0'; } for (int i = 1;i < l1;i++) { for (int j = 0;j < i;j++) { num1 = num1 * 10 + s1[j] - '0'; } for (int j = i;j < l1;j++) { num2 = num2 * 10 + s1[j] - '0'; } if (num1 + num2 == num3) { cout << num1 << "+" << num2 << '=' << num3; return 0; } num1 = 0; num2 = 0; } cout << "Impossible!"; return 0; }
-
1
#include <iostream> #include <string> #include <cmath> using namespace std; int main() { string a; getline(cin, a); int result = 0; int adjust = 0; int j = 0;//j不仅可以用于循环,也可用来记录result的位数 int q = 0;//用来记录adjust的位数,从而用来确定循环次数 int can = 0;//表示是否能够找到这个式子 int num = 0;//用来记录切开后的和 for (int i = a.size() - 1; i >= 0; i--) { if (a[i] != '=') { result += (a[i] - 48) * pow(10, j); j++; } else { break; } } for (int i = 0; i < a.size(); i++) { if (a[i] != '=') { adjust = adjust * 10 + a[i] - 48; q++; } else { break; } } for (int i = 1; i <= q - 1; i++) { num = adjust - adjust / (int)pow(10, i) * (int)pow(10, i) + adjust / (int)pow(10, i); //读取各个位并且在不同的地方切开,这个思路在回文数(1083)里也有 if (num == result) { cout << adjust / (int)pow(10, i) << "+" << adjust - adjust / (int)pow(10, i) * (int)pow(10, i) << "=" << result; can = 1;//找得到 break; } } if (can == 0) { cout << "Impossible!";//找不到 } return 0; }
- 1
信息
- ID
- 114
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 1
- 标签
- 递交数
- 67
- 已通过
- 51
- 上传者