【PTA Advanced】1060 Are They Equal(C++)

news/2024/11/28 5:50:24/

目录

题目

Input Specification:

Output Specification:

Sample Input 1:

Sample Output 1:

Sample Input 2:

Sample Output 2:

思路

C++ 知识点UP

代码


题目

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 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 10100, 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. 先去小数点

比如123.456变成123456*10^3

2. 再整数保留n位(比如n为3时)

123456*10^3变成123*10^3

3. 最后确定次方数

123*10^3中123为格式化后的小数部分,次方数由3变为3+n=6,最终为0.123*10^6

C++ 知识点UP

1. vector判断是否相等

vector相等是指容器内值和顺序都一致

可以直接用vec1==vect2这种方式去判断

2. 指针类型变量所指地址改值(注意*优先级)

比如:指针类型变量power所指地址的值需要+1时,不可以直接*power++,而要对*power加括号,即(*power)++,因为*的优先级低于++的优先级

代码

#include <iostream>
#include <vector>
#include <cmath>using namespace std;int n;vector<char> formatFloat(string str,int* power) {vector<char> res;// 先去小数点(eg.将123.456变成123456*10^-3) bool isBegin=true;bool afterPot=false; (*power)=0;for(int i=0;i<str.size();i++) {// 舍弃掉开头连续的0 if(isBegin&&str[i]=='0') {// 小数点后的0在舍弃时,power要变小 if(afterPot) (*power)--;continue;}// 遇到小数点时 if(str[i]=='.') {afterPot=true;}else {// 遇到数字时res.push_back(str[i]);if(afterPot) (*power)--;isBegin=false;	}  }// 这个数就是0时 if(isBegin) {res.push_back('0');*power=0;} // 计算整数部分只保留n位时的情况(eg.123456*10^-3变成123*10^-3) int diff=res.size()-n;if(!isBegin) (*power)+=diff; for(int i=0;i<abs(diff);i++) {if(diff>0) res.pop_back();else if(diff<0) res.push_back('0');}// res记录小数部分,power记录题目要求的format形式中的次方数if(!isBegin) (*power)+=n; return res;
}void printFormat(vector<char> vec, int power) {cout<<" 0.";for(int i=0;i<n;i++) {cout<<vec[i];}cout<<"*10^"<<power;
}int main(int argc, char** argv) {string a,b;cin>>n>>a>>b;int powerA,powerB;vector<char> aFormat=formatFloat(a,&powerA);vector<char> bFormat=formatFloat(b,&powerB);// 判断a b是否相等if(powerA==powerB&&aFormat==bFormat) {cout<<"YES";printFormat(aFormat,powerA); }else {cout<<"NO";printFormat(aFormat,powerA); printFormat(bFormat,powerB); 	}return 0;
}


http://www.ppmy.cn/news/24380.html

相关文章

MWORKS--MoHub介绍

MWORKS--MoHub介绍1 介绍1.1 简介1.2 功能特征2 快速上手2.1 进入工作台2.2 新建仓库并进入建模空间2.3 建模进入建模工作空间加载模型库新建模型2.4 仿真2.5 后处理曲线、动画2.6 查看模型信息3 使用手册参考1 介绍 1.1 简介 MWORKS.MoHub 支持工业知识、经验、数据的模型化…

ajax是什么?咋实现的

创建交互式网页应用的网页开发技术 再不重新加载整个网页的前提下&#xff0c;与服务器交换数据并且更新部分内容 简单来说就是无页面刷新的数据交互 通过创建xmlhttprequest对象向服务器异步发送请求从而获取数据&#xff0c;然后操作dom更新内容 1&#xff0c;创建xmlhttpr…

Spring面试重点(三)——AOP循环依赖

Spring面试重点 AOP 前置通知&#xff08;Before&#xff09;&#xff1a;在⽬标⽅法运行之前运行&#xff1b;后置通知&#xff08;After&#xff09;&#xff1a;在⽬标⽅法运行结束之后运行&#xff1b;返回通知&#xff08;AfterReturning&#xff09;&#xff1a;在⽬标…

Java之动态规划之子序列问题

目录 0.动态规划问题 一.最长递增子序列 1.题目描述 2.问题分析 3.代码实现 二.最长递增子序列 1.题目描述 2.问题分析 3.代码实现 三.最长重复子数组 1.题目描述 2.问题分析 3.代码实现 4.代码的优化(滚动数组) 四.最长公共子序列 1.题目描述 2.问题分析 3.代…

MicroBlaze系列教程(4):AXI_UARTLITE的使用

文章目录 @[toc]AXI_UARTLITE简介MicroBlaze添加串口IP常用函数使用示例参考资料工程下载本文是Xilinx MicroBlaze系列教程的第4篇文章。 AXI_UARTLITE简介 axi_uartlite是Xilinx提供axi-lite接口的通用串口IP核,用AXI-Lite总线接口和用户进行交互,速度可以根据不同的芯片调…

《剑指offer》:数组部分

一、数组中重复的数字题目描述&#xff1a;在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的&#xff0c;但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如&#xff0c;如果输入长度为7的数组{2,3,1…

【C++初阶】十三、模板进阶(总)|非类型模板参数|模板的特化|模板分离编译|模板总结(优缺点)

目录 一、非类型模板参数 二、模板的特化 2.1 模板特化概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 三、模板分离编译 四、模板总结&#xff08;优缺点&#xff09; 前言&#xff1a;之前模板初阶并没有把 C模板讲完&#xff0c;因为当时没有接触…

无主之地3重型武器节奏评分榜(9.25) 枪械名 红字效果 元素属性 清图评分 Boss战评分 泛用性评分 特殊性评分 最终评级 掉落点 掉率 图片 瘟疫传播

无主之地3重型武器节奏评分榜&#xff08;9.25&#xff09; 枪械名 红字效果 元素属性 清图评分 Boss战评分 泛用性评分 特殊性评分 最终评级 掉落点 掉率 图片 瘟疫传播者 发射巨大能量球&#xff0c;能量球会额外生成追踪附近敌人的伴生弹 全属性 SSS SSS SSS - T0 伊甸6号-…