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;
}
posted @ 2016-10-18 20:23  一叶落尽天下秋  阅读(204)  评论(0编辑  收藏  举报