3 条题解

  • 3
    @ 2024-1-30 14:47:41

    已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,放心食用
    

    可以走了,赞👍 留下!!!

    • @ 2024-1-30 14:52:35

      前面有两位10LV的大大大佬,不要看我

  • 3
    @ 2023-7-29 12:01:03
    #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
      @ 2023-7-8 12:45:26
      #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
      上传者