一开始我这样写最后一个测试点会答案错误,我认为如果是类似于0.000 * 10 ^3应该写成 0 * 10 ^3但似乎还是应该改写成0.000 * 10 ^3,也就是说我这么做是没有必要的?有时候感觉真的不太理解题目的意思,所以那个答案错误会是这样产生的吗……(ps:一开始我有一个无法跳出的死循环,显示超时了,所以看到超时不要老是怀疑算法不行,毕竟这道题怎么看都觉得不会超时才对……)
(原先的)
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int n;
scanf("%d",&n);
string a,b;
cin>>a>>b;
int cnta,cntb;
for(cnta=0;cnta<a.length();cnta++){
if(a[cnta]=='.'){
break;
}
}
for(cntb=0;cntb<b.length();cntb++){
if(b[cntb]=='.'){
break;
}
}
int ka=0,kb=0;
while(a[ka]=='0'||a[ka]=='.'){
ka++;
}
while(b[kb]=='0'||b[kb]=='.'){
kb++;
}
if(cnta>=ka){
cnta=cnta-ka;
}else{
cnta=cnta-ka+1;
}
if(cntb>=kb){
cntb=cntb-kb;
}else{
cntb=cntb-kb+1;
}
if(ka==a.length()){
cnta=0;
}
if(kb==b.length()){
cntb=0;
}
string fa,fb;
bool flaga=false,flagb=false;
int i=0;
while(i<n){
if(ka<a.length()&&a[ka]!='.'){
fa=fa+a[ka];
if(a[ka]!='0'){
flaga=true;
}
i++;
}else if(ka>=a.length()){
fa=fa+'0';
i++;
}
ka++;
}
i=0;
while(i<n){
if(kb<b.length()&&b[kb]!='.'){
fb=fb+b[kb];
if(b[kb]!='0'){
flagb=true;
}
i++;
}else if(kb>=b.length()){
fb=fb+'0';
i++;
}
kb++;
}
if(fa==fb&&cnta==cntb){
if(flaga==true){
printf("YES 0.%s*10^%d",fa.c_str(),cnta);
}else{
printf("YES 0*10^%d",cnta);
}
}else{
if(flaga==true&&flagb==true){
printf("NO 0.%s*10^%d 0.%s*10^%d",fa.c_str(),cnta,fb.c_str(),cntb);
}else if(flaga==false&&flagb==true){
printf("NO 0*10^%d 0.%s*10^%d",cnta,fb.c_str(),cntb);
}else if(flaga==true&&flagb==false){
printf("NO 0.%s*10^%d 0*10^%d",fa.c_str(),cnta,cntb);
}else{
printf("NO 0*10^%d 0*10^%d",cnta,cntb);
}
}
return 0;
}
(后来的)
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int n;
scanf("%d",&n);
string a,b;
cin>>a>>b;
int cnta=a.length(),cntb=b.length();
for(int i=0;i<a.length();i++){
if(a[i]=='.'){
cnta=i;
break;
}
}
for(int i=0;i<b.length();i++){
if(b[i]=='.'){
cntb=i;
break;
}
}
int ka=0,kb=0;
while(a[ka]=='0'||a[ka]=='.'){
ka++;
}
while(b[kb]=='0'||b[kb]=='.'){
kb++;
}
if(cnta>=ka){
cnta=cnta-ka;
}else{
cnta=cnta-ka+1;
}
if(cntb>=kb){
cntb=cntb-kb;
}else{
cntb=cntb-kb+1;
}
if(ka==a.length()){
cnta=0;
}
if(kb==b.length()){
cntb=0;
}
string fa,fb;
int indexa=0,indexb=0;
while(indexa<n){
if(a[ka]!='.'&&ka<a.length()){
fa=fa+a[ka];
indexa++;
}else if(ka>=a.length()){
fa=fa+'0';
indexa++;
}
ka++;
}
while(indexb<n){
if(b[kb]!='.'&&kb<b.length()){
fb=fb+b[kb];
indexb++;
}else if(kb>=b.length()){
fb=fb+'0';
indexb++;
}
kb++;
}
if(fa==fb&&cnta==cntb){
printf("YES 0.%s*10^%d",fa.c_str(),cnta);
}else{
printf("NO 0.%s*10^%d 0.%s*10^%d",fa.c_str(),cnta,fb.c_str(),cntb);
}
return 0;
}