感谢松鼠爱葡萄
大佬代码太简洁了ilil
#include <iostream>
#include <cstring>
using namespace std;
string change(string a, int n)
{
//    找到小数点的位置,从0开始计数
    int k = a.find(".");
//    如果字符串中没有 ".",在末尾给它加上一位 "."
    if (k == -1) a += '.', k = a.find(".");
//    去除 ".",做成一个新的字符串s
    string s = a.substr(0, k) + a.substr(k + 1);
//    去除前导0
    while (s.size() && s[0] == '0') s = s.substr(1), k -- ;
//    如果字符串为空 代表s="0"
    if (s.empty()) k = 0;
//    字符串长度比要求保留的位数要多, 则进行截取操作
    if (s.size() > n) s = s.substr(0, n);
//    否则 在末尾补0
    else s += string(n - s.size(), '0');
    return "0." + s + "*10^" + to_string(k);
}
int main()
{
    int n;
    string a, b;
    cin >> n >> a >> b;
    a = change(a, n);
    b = change(b, n);
    if (a == b) cout << "YES " << a << endl;
    else cout << "NO " << a << ' ' << b << endl;
    return 0;
} 
科学计数法底数是0~1
错误思路
我是想分类讨论,判断小数点位置与第一位不为0的点的距离之差,作为指数,然后再根据题目所需,取字符串中的指定长度,然后再加个小数点,还要在判断是不是要填充0……累。
实际上不需要这么麻烦,在原来的字符串上进行编辑
指数的判断:先找到原来小数点在的位置k,然后去掉小数点,每去掉一个前导0,k--,䒑太妙了
大佬的代码devc++硕tostring未declare,参考Dev C++ 报错: ‘to_string‘ was not declared in this scope_str' was not declared in this scope-CSDN博客
在tool里面加上一行并打钩ok
string新用法开发
string(n,'单个字符')
表示生成一个有
string(3,'c') => "ccc"
必须是字符,不能是字符串
//修改后的ac
#include <cstdio>
#include <queue>
#include <vector> 
#include <set> 
#include <string>
#include <iostream>
#include <map>
using namespace std;
int point1,point2,n;
string anstr(string str)
{
	int k=str.find(".") ;
	//如果没有小数点,就加上小数点
	if(k==-1) str+=".",k=str.find(".");
	
	//去掉小数点
	str.erase(k,1);
//	cout<<str;
	//开始去前导
	while(!str.empty() && str[0]=='0')
	{str=str.substr(1);k--;
	//substr只提供一个参数,表示省略第二个参数,即py中的【3:】 
	//k就是指数 
	 } 
	 if(str.empty() ) k=0;
	 //接下来根据要求的字符长度,截断或填充
	 //截断 
	 if(str.size() > n)
	 str=str.substr(0,n);  
	 //填充
	 if(str.size() <n)
	 str=str+string(n-str.size() ,'0');
	 
	 
	 //+前缀 
	 str="0."+str;
	 str=str+"*10^"+to_string(k)  ;
	 
	 return str;
	
	
}
int main()
{string s1,s2,ans1,ans2;int first1,first2,e1,e2;
	cin>>n>>s1>>s2;
	int n1=s1.size() ;
	int n2=s2.size() ;
	point1=(s1.find(".")!=string::npos )? s1.find("."):-1;
	point2=(s2.find(".")!=string::npos )? s2.find("."):-1;
	if(anstr(s1)==anstr(s2))cout<<"YES"<<" "<<anstr(s1);else cout<<"NO"<<" "<<anstr(s1)<<" "<<anstr(s2);
	
	
 }  
 



















