求助,听灌多,玄关
  • 板块灌水区
  • 楼主Aakw_Tea
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/15 19:46
  • 上次更新2024/7/15 20:33:08
查看原帖
求助,听灌多,玄关
1211960
Aakw_Tea楼主2024/7/15 19:46

有思路实现了但只拿了部分(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分

2024/7/15 19:46
加载中...