欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

1060 Are They Equal (25 分)【难度: 一般 / 知识点: 模拟 字符串处理】

发布时间:2025/3/20 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 1060 Are They Equal (25 分)【难度: 一般 / 知识点: 模拟 字符串处理】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.


https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872
细节很多,需要注意一下几个情况:

  • 12345000 全是整数的情况
  • 000012313 全是整数有前导零的情况
  • 123.456 既有整数,又有小数的情况
  • 0.00001323 只有小数的情况
  • 0 这种情况
  • 0.00000 这种情况
#include<bits/stdc++.h> using namespace std; int n,len1,len2; string a,b,s1,s2; int get(string& s,string& ans) {if(s.find('.')==-1)//整数{while(s.size()>1&&s[0]=='0') s=s.substr(1);for(int i=0;i<s.size();i++){if(s[i]!='.') ans+=s[i];else break;if(ans.size()==n) break;}while(ans.size()<n) ans="0"+ans;if(s[0]=='0') return 0;//说明是0return s.size();}else{int k=s.find('.');bool flag=0;for(int i=0;i<k;i++) if(s[i]!='0') flag=1;//说明" . "前边有数if(flag)//前整,后小数{while(s[0]=='0') s=s.substr(1);for(int i=0;i<s.size();i++){if(s[i]!='.') ans+=s[i];if(ans.size()==n) break;}while(ans.size()<n) ans=ans+"0";return s.find('.');}else//全是小数{s=s.substr(s.find('.')-1);int cnt=2;while(s[cnt]=='0'&&cnt<s.size()) cnt++;for(int i=cnt;i<s.size();i++){ans+=s[i];if(ans.size()==n) break;}while(ans.size()<n) ans=ans+"0";if(cnt==s.size()) return 0;///0.0000000这种情况return -(cnt-2);}} } int main(void) {cin>>n>>a>>b;len1=get(a,s1);len2=get(b,s2);if(s1==s2&&len1==len2) printf("YES 0.%s*10^%d",s1.c_str(),len1);else printf("NO 0.%s*10^%d 0.%s*10^%d",s1.c_str(),len1,s2.c_str(),len2);return 0; }

总结

以上是生活随笔为你收集整理的1060 Are They Equal (25 分)【难度: 一般 / 知识点: 模拟 字符串处理】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。