1060. Are They Equal (25)-PAT甲级真题
2018-01-11 10:13
363 查看
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*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
题目大意:给出两个数,问将它们写成保留N位小数的科学计数法后是否相等。如果相等,输出YES,输出他们的科学记数法表示方法。如果不相等输出NO,分别输出他们的科学计数法。
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
题目大意:给出两个数,问将它们写成保留N位小数的科学计数法后是否相等。如果相等,输出YES,输出他们的科学记数法表示方法。如果不相等输出NO,分别输出他们的科学计数法。
#include <cstdio> #include <cstring> #include <string> using namespace std; int main () { int n, p = 0, q = 0; string a, b; char A[10000], B[10000]; scanf ("%d%s%s", &n, a, b);\ /* cnta,cntb是用来记录科学技术法中10的次数的, 因为按照题目里最后都是0.xxx, 所以就是把所有的位数全部移动到小数点的右边, 也就是计算小数点左边到底有几个数。 那么就先找到小数点的index, 如果出现0和.计数位p,q++,出现其他数字就结束循环, 这样可以划分出整数位是0和整数位不是0 */ int cnta = a.find ('.'); int cntb = b.find ('.'); int indexa = 0, indexb = 0; while (a[p] == '0' || a[p] == '.') p++; while (b[q] == '0' || b[q] == '.') q++; if (cnta >= p) cnta = cnta - p; else cnta = cnta - p + 1; if (cntb >= q) cntb = cntb - q; else cntb = cntb - q + 1; if (p == a.length ()) cnta = 0; if (q == b.length()) cntb = 0; /* indexa = 0开始给新的A数组赋值,共赋值n位除去小数点外的正常数字, 从p的下标开始。如果p大于等于strlen, 说明字符串遍历完毕后依旧没能满足需要的位数, 此时需要在A数组后面补上0直到满足n位数字。 indexb同理,产生新的B数组 */ while (indexa < n) { if (a[p] != '.' && p < a.length ()) A[indexa++] = a[p]; else if (p >= a.length ()) A[indexa++] = '0'; p++; } while (indexb < n) { if (b[q] != '.' && q < b.length ()) B[indexb++] = b[q]; else if (q >= b.length()) B[indexb++] = '0'; q++; } if (strcmp (A, B) == 0 && cnta == cntb) printf ("YES 0.%s*10^%d", A, cnta); else printf ("NO 0.%s*10^%d 0.%s*10^%d", A, cnta, B, cntb); return 0; }
相关文章推荐
- 1110. Complete Binary Tree (25)-PAT甲级真题
- 1086. Tree Traversals Again (25)-PAT甲级真题
- 1075. PAT Judge (25)-PAT甲级真题
- 1010. Radix (25)-PAT甲级真题(二分法)
- 1117. Eddington Number(25)-PAT甲级真题
- 1067. Sort with Swap(0,*) (25)-PAT甲级真题(贪心算法)
- 1059. Prime Factors (25)-PAT甲级真题(素数表的建立)
- 1044. Shopping in Mars (25)-PAT甲级真题(二分查找)
- 1017. Queueing at Bank (25)-PAT甲级真题(模拟)
- PAT甲级真题及训练集(3)--1002. A+B for Polynomials (25)
- 1093. Count PAT’s (25)-PAT甲级真题
- 1105. Spiral Matrix (25)-PAT甲级真题
- 1025. PAT Ranking (25)-PAT甲级真题
- 1051. Pop Sequence (25)-PAT甲级真题(栈模拟)
- 1021. Deepest Root (25)-PAT甲级真题(图的遍历,dfs,连通分量的个数)
- 1118. Birds in Forest (25)-PAT甲级真题(并查集)
- 1036. Boys vs Girls (25)-PAT甲级真题
- 1032. Sharing (25)-PAT甲级真题
- 1060. Are They Equal (25)-PAT甲级真题(科学计数法)
- 1016. Phone Bills (25)-PAT甲级真题