A1060. Are They Equal
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.d1...dN*10^k" (d1>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
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std; // 0000.0012 0123.34
char str1[], str2[];
int process(char s[], int len){
int i,j, exp;
for(i = ; s[i] != '\0' && s[i] == ''; i++); //去除前导0
if(s[i] != '\0'){
for(j = ; s[j + i] != '\0'; j++)
s[j] = s[j + i];
s[j] = '\0';
}else{
for(int k = ; k < len; k++)
s[k] = '';
s[len] = '\0';
return ;
}
if(s[] == '.'){ //.0012
for(i = ; s[i] != '\0' && s[i] == ''; i++);
if(s[i] == '\0'){
exp = ;
s[] = '';
}else{
exp = i - ;
exp *= -;
for(j = ; s[i + j] != '\0'; j++)
s[j] = s[j + i];
s[j] = '\0';
}
}else{ //123.456
for(i = ; s[i] != '\0' && s[i] != '.'; i++);
if(s[i] == '\0'){
exp = i;
}else{
exp = i;
for(; s[i + ] != '\0'; i++)
s[i] = s[i + ];
s[i] = '\0';
}
}
for(j = ; s[j] != '\0'; j++);
while(j < len){
s[j++] = '';
}
s[len] = '\0';
return exp;
}
int main(){
int N, exp1, exp2;
scanf("%d %s %s", &N, str1, str2);
exp1 = process(str1, N);
exp2 = process(str2, N);
int tag = ;
for(int i = ; str1[i] != '\0'; i++)
if(str1[i] != str2[i]){
tag = ;
break;
}
if(tag == && exp1 == exp2){
printf("YES 0.%s*10^%d", str1, exp1);
}else{
printf("NO 0.%s*10^%d 0.%s*10^%d", str1, exp1, str2, exp2);
}
cin >> N;
return ;
}
总结:
1、题意:将给出的两个数字变成保留指定位小数的科学计数法的数字,之后看其是否相等。
2、主要分为两种数字,大于1和小于1(0.000123, 1234.5678),其次要注意有0000123的情况出现,要先去除前导0.
3、主要要做的就是想办法求出不带小数点的且符合要求的底数。
4、测试样例: 3 0.0 0
输出:YES 0.000*10^0
A1060. Are They Equal的更多相关文章
- 【算法笔记】A1060 Are They Equal
1060 Are They Equal (25 分) If a machine can save only 3 significant digits, the float numbers 1230 ...
- PAT甲级——A1060 Are They Equal
If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...
- A1060 Are They Equal (25 分)
一.技术总结 cnta.cntb用于记录小数点出现的位置下标,初始化为strlen(字符串)长度. q.p用于记录第一个非0(非小数点)出现的下标,可以用于计算次方和方便统计输出的字符串,考虑到前面可 ...
- [LeetCode] Minimum Moves to Equal Array Elements II 最少移动次数使数组元素相等之二
Given a non-empty integer array, find the minimum number of moves required to make all array element ...
- [LeetCode] Minimum Moves to Equal Array Elements 最少移动次数使数组元素相等
Given a non-empty integer array of size n, find the minimum number of moves required to make all arr ...
- [LeetCode] Partition Equal Subset Sum 相同子集和分割
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- Equal Sides Of An Array
参考:http://stackoverflow.com/questions/34584416/nested-loops-with-arrays You are going to be given an ...
- Int,Long比较重使用equal替换==
首先,==有很多限制,如Integer 类型的值在[-128,127] 期间,Integer 用 “==”是可以的(参考),超过范围则不行,那么使用equal则代替则完全ok public stati ...
- 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS"
无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间 2011-0 ...
随机推荐
- iptables限制连接数(如sftp) 以及 谨防CC/DDOS攻击的配置 ( connlimit模块)
之前在公司服务器上部署了sftp,用于上传业务系统的附件.后来由于程序连接问题,使的sftp连接数过多(最多时高达400多个sftp连接数),因为急需要对sftp的连接数做严格限制.操作记录如下: 启 ...
- Oracle日常运维操作总结-数据库的启动和关闭
下面是工作中对Oracle日常管理操作的一些总结,都是一些基本的oracle操作和SQL语句写法,在此梳理成手册,希望能帮助到初学者(如有梳理不准确之处,希望指出). 一.数据库的启动和关闭 1.1 ...
- CF 910 C. Minimum Sum
链接 [http://codeforces.com/group/1EzrFFyOc0/contest/910/problem/C] 题意 给你n个字符串,每个字符串的字符是a~j,每个字符都可以是0~ ...
- C++编写四则运算生成程序
1.计划方案 按照预定计划,在时限为一周时,完成该程序所需时间大致如下表: PSP2.1 Personal Software Process Stages Time Planning 计划 · Est ...
- 《Linux内核分析》 期中总结
Linux内核分析 期中总结 20135307 张嘉琪 一.Linux内核分析课程总结 学习笔记汇总 第一节 计算机是如何工作的 第二节 操作系统是如何工作的 第三节 构造一个简单的Linux系统Me ...
- Notepad++找回Plugin Manager{在v7.50后(包括7.50)不带有插件管理器(Plugin Manager)}
https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2459 64 bit Plugin Manager is now avai ...
- 面象对象设计原则之一:单一职责原则(Single Responsibility Principle, SRP)
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小.单一职责原则定义如下:单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域 ...
- shell获取帮助
一.內建命令与外部命令 1.內建命令 内建命令是 shell 程序的一部分,是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 s ...
- Eclipse 下载安装
https://blog.csdn.net/qq_27200591/article/details/72823816(安装eclipse copy) 第一步:下载eclipse,并安装. 下载链接: ...
- lambda函数对象与作用域 (重点)
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时 ...