有思路实现了但只拿了部分(73)请各位DALAO帮一下
题目描述
小华的寒假作业上,有这样一个趣味填空题:
给出用等号连接的两个整数,如“1234=492”。当然,现在这个等式是不成立的。
请你在等号左边整数中的某个位置尝试插入一个乘号,看有没有可能让等式成立。
以上面的式子为例,如果写成 123乘4=492,这样就正确了。 现在请你编写一个程序来解决它。
(测试数据保证不会出现多个解决方案) 输入
等号两边的整数均不会超过 2000000000。
输出
如果存在这样的方案,请输出那个正确的式子;如果 不存在解决方案,请输出“Impossible”(引号中的部分)。
样例输入
1234=492
样例输出
123乘4=492
提示
如果存在前缀0,则不省略。 如 输入:1001=10 输出:10乘01=10
注释:乘均改为“*”;
附上代码:
#include <bits/stdc++.h>
using namespace std;
int ansa,ansb,sum[233],suma[233],l,lja,ljb,k;
char c[236];
int main(){
while(cin>>c[++l]){
if(c[l]=='=')
lja=l-1;
}
for(int i=1;i<=lja;i++){
k=c[i]-'0';
sum[i]=sum[i-1]*10+k;
// if(k!=0){
for(int j=1;j<=lja-i;j++)k*=10;
ansa+=k;
suma[i]=ansa;
// }
}
for(int i=lja+2;i<l;i++){
k=c[i]-'0';
for(int j=1;j<=l-i-1;j++)k*=10;
ansb+=k;
}
for(int i=1;i<=lja-1;i++){
int h=ansa-suma[i];
k=sum[i]*h;
if(k==ansb){
cout<<sum[i]<<"*"<<h<<"="<<ansb;
return 0;
}
}
cout<<"Impossible";
return 0;
}
如果办 if(k!=0) 的注释解掉只能拿64分