首页 > 代码库 > codevs 2884 字符等式

codevs 2884 字符等式

2884 字符等式

题目描述 Description

现在,我们有一个用卡片组成的等式(卡片仅仅是数字和=号)
虽然是等式 但是它却是错误的.....

后来你觉得,
似乎在这个等式左侧的某个地方添上一个加号“+”
就可以使等式成立...

但是,,等到你要将之付诸行动的时候,
你却不懂得怎么做..

所以你决定求助于万能的计算机...

输入描述 Input Description

一行,一个等式
保证每个数字不会超过 maxlongint OR int

输出描述 Output Description

一行,
如果可以成功使等式成立,
就输出成立的等式,(如果存在多个等式成立就输出加号‘+’最靠左的一个)
      如 输入221=23,则输出2+21=23,而不输出22+1=23

否则输出"Impossible!"(不含引号)

样例输入 Sample Input
样例1
11=2
样例2
222=222
样例输出 Sample Output
样例1
1+1=2
样例2
Impossible!
数据范围及提示 Data Size & Hint

不要想得太复杂,蠢蠢的字符串操作。

注意请原始输出:如99=018输出9+9=018;像卡片一样哦,喵~

思路

先处理出等号右边的数,然后枚举加号的位置。

代码

#include<cstdio>#include<cstring>#include<queue>using namespace std;char s[1001];int a,b,c,l,n;queue<char>d;int main(){    int i,j,k;    scanf("%s",s);    l=strlen(s);    i=0;    while(s[i]!==)      i++;    n=i;    i++;    while(i<l)      c=c*10+s[i]-0,i++;    for(i=0;i<n-1;i++)    {        b=0;        a=a*10+s[i]-0;        for(j=i+1;j<n;j++)          b=b*10+s[j]-0;        if(a+b==c)        {            for(k=0;k<l;k++)              if(k==i)                printf("%c+",s[k]);              else                if(k==n)                  printf("=");                else                  printf("%c",s[k]);            return 0;        }    }    printf("Impossible!");    return 0;}

codevs 2884 字符等式