![](https://img-blog.csdnimg.cn/090cc407de50421cad6401c96f4f4837.jpeg)
** 1128 - 整数串拆段
** 来源: 东方博宜oj oj.czos.cn
*解法一:
#include<bits/stdc++.h>
using namespace std;
bool sushu(int n)
{
bool f=true;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
f=false;
break;
}
}
if(n<=1) f=false;
return f;
}
int main()
{
string s,s1,s2;
int x,y,mi=INT_MAX;
cin>>s;
// 将整数s截取出2个子字符串,穷举所有可能的求和方案
for(int i=0;i<s.size()-1;i++)
{
s1=s.substr(0,i+1);
s2=s.substr(i+1);
x=stoi(s1);
y=stoi(s2);
if(sushu(x+y)&&x+y<mi) mi=x+y;
}
if(mi==INT_MAX) cout<< -1;
else cout<<mi;
return 0;
}
*解法二:拆成两段 n/100,n%100;
#include<bits/stdc++.h>
using namespace std;
bool sushu(int n)
{
bool f=true;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
f=false;
break;
}
}
if(n<=1) f=false;
return f;
}
int main()
{
int n;
bool flag=0;
cin>>n;
int k=10,minn=INT_MAX;
for(int i=1;i<=9;i++) // 字符串长度小于10
{
int a=n/k+n%k;
if(sushu(a))
{
flag=1;
if(a<minn) minn=a;
}
k*=10;
}
if(flag) cout<< minn;
else cout<< -1;
return 0;
}
![](https://img-blog.csdnimg.cn/e8eefa4a3b0e4410a6c8f0a5c0cee6bd.jpeg)
**1114 - 趣味填空
**来源:东方博宜oj oj.czos.cn
*解法一:string 求解
#include<bits/stdc++.h>
using namespace std;
string s;
int main()
{
cin>>s;
int p=s.find('=');
string s1=s.substr(0,p);
string s2=s.substr(p+1);
int x2=stoi(s2);
string a,b;
int a1,b1,x1;
for(int i=1; i<=s1.size(); i++)
{
a=s.substr(0,i);
b=s.substr(i);
a1=stoi(a);b1=stoi(b);
x1=a1+b1;
if(x1==x2)
{
cout<< a1<< "+"<< b1<< "="<< x2<<endl;
return 0;
}
}
cout<< "Impossible!"<<endl;
return 0;
}
*解法二:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c=0;
scanf("%d=%d",&a,&b);
while(a)
{
c=c*10+a%10;
a/=10;
if(a+c==b) break;
}
printf("%d+%d=%d",a,c,b);
return 0;
}
*解法三:
#include<bits/stdc++.h>
using namespace std;
long long a,b,c,sum;
int main()
{
string s;
getline(cin,s);
int p=s.find("=");
c=stoll(s.substr(p+1));
for(int i=1;i<=p;i++)
{
a=stoll(s.substr(0,i));
b=stoll(s.substr(i));
sum=a+b;
if(sum==c)
{
s.insert(i,"+");
cout<<s;
return 0;
}
}
cout<< "Impossible!";
return 0;
}
//*解法四:
#include<bits/stdc++.h>
using namespace std;
char s[20];
int n1,n2;
int p=-1;
int main()
{
cin>>s;
for(int i=0;s[i]!='\0';i++)
{
if(s[i]=='=')
{
p=i;
continue;
}
//没有遇到过=
if(p==-1) n1=n1*10+(s[i]-'0');
else n2=n2*10+(s[i]-'0');
}
//尝试n1所有的拆分可能
// p位数有p-1种拆分的可能
int t=10,x1,x2;
bool f=false;
for(int i=1;i<=p-1;i++)
{
x1=n1/t;
x2=n1%t;
t=t*10;
if(x1+x2==n2)
{
cout<<x1<< "+"<<x2<< "="<<n2<<endl;
f=true;
}
}
if(f==false) cout<< "Impossible!";
return 0;
}