1060 Are They Equal (25 point(s))

【信息科学与工程学】计算机科学与技术——第七十七篇 系统架构设计02 编号类型模型配方企业资本运作的方法/规则/条件/依据及所有的步骤(​风险处理/异常处理/危机应对关联知识法律法规和裁决依据​​由发起人(通常是知名投资人、投行或产业资本)先设立一个只有现金、无实际业务的特殊目的收购公司(SPAC),通过IPO募集资金并在交易所上市。然后在规定时间内(通常24个月)寻找一家非上市公司进行合并(De-SPAC),使目标公司迅速实现上市,规避传统IPO的复杂流程和不确定性。1.:在开曼或特拉华注册空壳公司,注入少量种子资金。2. 阅读详情

1060 Are They Equal (25 point(s))

If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×10​5​​ with simple chopping. Now given the number of significant digits on a machine and two float numbers, you are supposed to tell if they are treated equal in that machine.

Input Specification:

Each input file contains one test case which gives three numbers N, A and B, where N (<100) is the number of significant digits, and A and B are the two float numbers to be compared. Each float number is non-negative, no greater than 10​100​​, and that its total digit number is less than 100.

Output Specification:

For each test case, print in a line YES if the two numbers are treated equal, and then the number in the standard form 0.d[1]...d[N]*10^k (d[1]>0 unless the number is 0); or NO if they are not treated equal, and then the two numbers in their standard form. All the terms must be separated by a space, with no extra space at the end of a line.

Note: Simple chopping is assumed without rounding.

Sample Input 1:

3 12300 12358.9

Sample Output 1:

YES 0.123*10^5

Sample Input 2:

3 120 128

Sample Output 2:

NO 0.120*10^3 0.128*10^3

这题需要考虑的特殊情况太多。如:

1. 整数部分也可能有前导0,如00012和12的比较。

2. 0的特殊判断(我认为此题不太严谨的地方有0的指数怎么写是有争议的,按照题解应该是0)。 

3. 我的思路是首先去掉干扰的0,然后分成整数和小数分别处理,其中小数又分成<1的(0.xxxx)和>=1的(xx.xx)来处理。

此题的感受:

1. PAT的用例可以说是周密了,必须要非常仔细地考虑所有的特殊情况,要想一次性AC不是一件容易的事情。

2. 认真读题,没有完整思路之前不要动手!

3. 熟悉STL会起到事半功倍的效果。看看自己的代码和大神代码的区别!

#include<iostream>
#include<string>
#define max 107
using namespace std;
string to_String(int n)//int转string来自网络 
{
	if(n==0) return "0";
    int m = n;
    char s[max];
    char ss[max];
    int i=0,j=0;
    if (n < 0)// 处理负数
    {
        m = 0 - m;
        j = 1;
        ss[0] = '-';
    }    
    while (m>0)
    {
        s[i++] = m % 10 + '0';
        m /= 10;
    }
    s[i] = '\0';
    i = i - 1;
    while (i >= 0)
    {
        ss[j++] = s[i--];
    }    
    ss[j] = '\0';    
    return ss;
}
bool isZero(string s){
	for(int i=0;i<s.length();i++){
		if(s[i]!='0'&&s[i]!='.') return false;
	}
	return true;
}
string notation(string s,int n){
	if(isZero(s)){
		string ans = ""; 
		for(int i=0;i<n;i++) ans+='0'; 
		ans =  "0."+ans+"*10^0";
		return ans;
	}
	while(s.length()>0&&s[0]=='0'){
		s.erase(s.begin());//去掉s的前导0 
	}
	if(s[0]=='.') s='0'+s;//如果直接就是小数点,为它补0 
	//得到有效位 
	string sig = "";int idx = 0;
	bool start = false;
	for(int i=0;i<s.length()&&idx<n;i++){
		if(s[i]=='.') continue;
		if(!start&&s[i]>'0'&&s[i]<='9') start=true;
		if(start){
			sig += s[i];idx++;
		}
	}
	while(idx<n){
		sig=sig+"0";idx++;
	}
	int exp=0;string ans="";
	if(s.find('.')!=s.npos){//是小数 
		if(s[0]=='0'){//是0.xxx的形式,判断0.以后还有多少个0 
			bool hasPoint = false;
			for(int i=0;i<s.length();i++){
				if(!hasPoint&&s[i]=='.'){
					hasPoint = true;
					continue;
				} 
				if(hasPoint){
					if(s[i]=='0') exp--;
					else break;
				}
			}
		}
		else{//是xx.xx形式,判断整数部分有多少位 
			exp = s.find('.');
		}
	}
	else{//不是小数 
		exp	= s.length(); 
	}
	ans = "0."+sig+"*10^"+to_String(exp);
	return ans;
}
int main(void){
	string s1,s2;int n;cin>>n>>s1>>s2;
	s1 = notation(s1,n);
	s2 = notation(s2,n);
	if(s1==s2){
		cout<<"YES"<<" "<<s1<<endl;
	}
	else{
		cout<<"NO"<<" "<<s1<<" "<<s2<<endl;
	}
	return 0;
}

大神思路:

读入字符串后,把它想成一个数字串。整体思路:得到有效位、求指数。

1. 首先去除前置0(可能是0.xxxx形式或者00xxx形式)。

2. a) 此时如果s[i]是小数点,则说明这是一个小于1的数(0.xxxx形式),然后依次去除小数点后的0,每去除一个指数自减1。

b) 此时如果不是小数点,则说明这个数大于1,找点小数点并删除小数点(可能不存在),每移动一个位置则指数自加1。

3. 此时已经得到了指数。此时的字符串完全是有效位,然后根据有效精度取相应的位数,如果不足需要补零。

大神代码(https://blog.youkuaiyun.com/weixin_41724000/article/details/79948581):

/*copyright@算法笔记(胡凡,曾磊)*/
/*2018/4/15                     */
 
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int n;//有效位数
string deal(string s,int &e){
	int k=0;//s的下标
	while(s.length()>0&&s[0]=='0'){
		s.erase(s.begin());//去掉s的前导0 
	} 
	if(s[0]=='.'){
		s.erase(s.begin());//去掉前导0后是小数点,说明s是小于1的小数
		while(s.length()>0&&s[0]=='0'){
			s.erase(s.begin());//去掉小数点后非零位前的所有零
			e--;//每去掉一个零,指数e减1 
		} 
	} else{//去掉所有前导零后不是小数点,则找到后面的小数点删除 
		while(k<s.length()&&s[k]!='.'){
			k++;
			e++;//只要不碰到小数点就让指数e++ 
		}
		if(k<s.length()){//while结束后k<s.length(),说明碰到了小数点 
			s.erase(s.begin()+k);//把小数点删除 
		}
	}
	if(s.length()==0){
		e=0;//如果去掉前导零后s的长度变为0,说明这个数为0 
	}
	int num=0;
	k=0;
	string res;
	while(num<n){
		if(k<s.length())res+=s[k++];//只要还有数字,就加到res末尾
		else res+='0';//否则res末尾添加0
		num++;//精度加1 
	} 
	return res;
}
 
int main(){
	string s1,s2,s3,s4;
	cin>>n>>s1>>s2;
	int e1=0,e2=0;//e1,e2为s1与s2的指数
	s3=deal(s1,e1);
	s4=deal(s2,e2);
	if(s3==s4&&e1==e2){
		cout<<"YES 0."<<s3<<"*10^"<<e1<<endl;
	} else{
		cout<<"NO 0."<<s3<<"*10^"<<e1<<" 0."<<s4<<"*10^"<<e2<<endl;
	}
	return 0;
}

 

MobaXterm终端工具个人学习版安装包及常用配置备份 资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。 立即下载

相关推荐

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

1060 Are They Equal (25 point(s))

#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;string&gt; using namespace std; int len; string tran(string s, int&amp; n) { while(s.length() &amp;&amp; s[0] == '0') s.erase(s.begin())...

徐伯莱 314

科技中介服务机构如何借助平台提升技术撮合服务的专业性与响应速度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

1060 Are They Equal (25 point(s))

问题描述: If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×10^5 with simple chopping. Now given the number of si...

qq_40965191的博客 208

产业园区如何利用AI技术提升科技成果转化服务的响应速度与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

11232131231231是的

11232131231231是的

A1060

#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int n; string deal(string s,int&amp; e){ int k=0; while(s.length()&gt;0&amp;&amp;s[0]=='0'){//去除前导0 s.erase(s.begin()); } i...

qq_32831261的博客 294

告别轮询!用STM32CubeMX给STM32F030配置ADC多通道+DMA,实测代码分享

本文详细介绍了如何使用STM32CubeMX为STM32F030配置ADC多通道采集与DMA传输,显著提升采集效率。通过实测对比轮询与DMA模式的性能差异,提供完整的代码实现和优化技巧,帮助开发者快速掌握这一高效采集方案。

weixin_42570296的博客 410

PAT 1060 Are They Equal?

题目链接:https://www.patest.cn/contests/pat-a-practise/1060 做题感受:这道题目考察的是字符串的处理能力,不过case太坑了,因为很多输入格式都没有说明,而且输出指定不明。比如需要考虑如下几种情况的输入:0, 0.0, 0.00, 或者是 0.00000123这种。而且输出的要求是比如n=5,输入0,输出应该为0.00000*10^

每天完成一个小目标 859

C#实战:5分钟搞定西门子S7-1200 PLC数据读写(S7netplus保姆级教程)

本文详细介绍了如何使用C#和S7netplus库快速实现与西门子S7-1200 PLC的数据读写。从环境准备、连接管理到数据读写高级技巧,提供了保姆级教程和实战方案,帮助开发者绕过常见陷阱,提升工业自动化项目的开发效率。

weixin_28432777的博客 283

期权定价模型系列[11]三叉树期权定价[trinomial model ]

三叉树期权定价方法简介

xiaowu1997的博客 1847

PAT A1060 Are They Equal (25分)

A1060 Are They Equal (25分) If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×10 ​5 ​​ with simple chopping. ...

VictorierJwr的博客 282

Dify 深度进阶:从入门到精通AI应用构建

《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。

同名公众号:dify实验室 1950

1060 Are They Equal (25point(s))

1060 Are They Equal (25point(s)) If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×10 ​5 ​​ with simple chopping. Now given the number of significant digits on a ma

佳迪斯的博客 128

Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略

本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。

nnn11的博客 739

手把手教你用LTspice仿真扬声器阻抗曲线(附Dayton/Focal型号库)

本文详细介绍了如何使用LTspice仿真软件构建高精度扬声器模型,包括获取Dayton/Focal等厂商的SPICE模型库、模型导入方法、阻抗测试电路搭建及仿真设置。通过手把手教学,帮助读者快速掌握扬声器阻抗曲线的仿真技术,提升音响系统设计效率。

weixin_26897585的博客 388

codeup|1060 Are They Equal (25 point(s))

If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×10​5​​ with simple chopping. Now given the number of significant digits on a machine and two float numbers, you are

weixin_43340821的博客 160

假新闻检测论文分享(30)MMDFND: Multi-modal Multi-Domain Fake News Detection

现有的假新闻检测方法通常集中在单一领域的新闻上,如健康或政治。然而,社交媒体上的新闻往往来自多个领域,这给单一领域的假新闻检测方法带来了两个主要挑战:数据稀缺性:处理较小、单一领域的新闻数据集时,由于训练数据的稀缺,模型的有效性显著下降。跨领域检测的准确性下降:单一领域的假新闻检测方法在跨领域新闻数据集上的准确性大幅降低。缓解领域间模态语义偏差:通过DPLE网络提取跨领域和领域特定的知识,缓解了不同领域间文本和图像的语义差异。

weixin_41964296的博客 671

1060 Are They Equal (25 point(s)) PAT甲级

1060 Are They Equal (25 point(s)) 字符串 题目 If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×105 with simple chopping. Now given the number of significant digits on a

neko的博客 118

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络数据集不同于几何网络,是一种高级的连接模型,能够展示复杂的细节,拥有丰富的网络属性模型,可以模拟网络阻力、网络限制以及网络层次等。 本实验重点演示网络分析中最短路径的实现过程。 二、实验内容 1、网络数据集...

智慧空间实验室 5681

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PAT A1060 Are They Equal (25point(s))

题目链接 注意点: 1.本题有前导零,即可能出现000.01和0000123.45的情况,需先去除前导零。 2.主要思路是得到浮点数的有效数部分和指数部分,如果有效数部分和指数部分都相等则相等,否则不等。 3.可能会遇到两种情况,即小于1的数和大于1的数,这决定他们的整数部分是否为0。如果整数部分不为零,则指数必然为正数,可以从高位右移到小数点或末尾来得到指数;否则指数非正,如果不为零的话可以通过...

皮皮瓜的博客 120

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

1060 Are They Equal (25point(s)) - PAT 甲级 C语言

重点在于确定系数的有效数字和指数 * 去除小数点前的前导 0 后 * 若小数点前有数字,指数为正 * 则数字有几个,对应指数就为几 * 保留有效位数 * 若小数点前无数字,指数为负 * 则小数点后有几个 0,对应指数就为负几 * 保留有效位数 * 有效位数不足题目要求,后面补 0 这里提供一些测试用例, > 1 0 00.0 1 0.1 1.0 2 0.0 0.0010 4 00012.3 0.00123 注意: - 指数为 0 和 1 次方也要输出 - 无需四

有三只土豆 136

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

PAT 1060 Are They Equal (25分)

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872 题目描述 If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since ...

Rhao的博客 189

1060 Are They Equal (25 分)(保留浮点数)(string字符串处理)

1060 Are They Equal (25 分) If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered equal since they are both saved as 0.123×10​5​​ with simple chopping. No...

qq_41698081的博客 207

1060. Are They Equal (25)

1. 原题: https://www.patest.cn/contests/pat-a-practise/1060 2. 思路: 题意: 转换成类似科学记数法的形式,并比较是否相等。 思路: 字符串处理题。坑比较多。 若相等,则指数和尾数都要相等。 核心是如何获得指数和尾数。 要点: 1. 给出的数可能是0,或00这种(最后一个测试点)。 2. 可能有前导0, 如00123

坚不萌 338
上一篇: 1033 To Fill or Not to Fill (25 point(s))
下一篇: 1054 The Dominant Color (20 point(s))
coderwait
博客等级 码龄9年 20粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值