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.9Sample Output 1:
YES 0.123*10^5Sample Input 2:
3 120 128Sample Output 2:
NO 0.120*10^3 0.128*10^3
考查:字符串数组处理,字符串切割。与PAT 1073相似,建议两题一起做
#include<stdio.h> #include<string> using namespace std; char A[102]; char B[102]; int get_e(char *p) { int e = 0; if(p[0] != '0') for(int i = 0; p[i] != 0 && p[i] != '.'; i ++) e ++; else if(p[1] == '.') for(int i = 2; p[i+1] != 0 && p[i] == '0'; i ++) e --; else { int j = 0; while(p[j] == '0') j ++; for(; p[j] != 0 && p[j] != '.'; j ++) e ++; } return e; } string get_base(char *p, int n, int e) { string ret = ""; int index = 0; if(e > 0) { int i = 0; while(p[i] == '0') i ++; for(; p[i] != 0 && index < n; i ++) { if(p[i] == '.') continue; ret += p[i]; index ++; } } else { int i = 0; if(p[i + 1] == 0) { ret = "0"; while(ret.size() < n) ret += '0'; return ret; } while(p[i] != '.') i ++; i ++; while(p[i] == '0') i ++; for(; p[i] != 0 && index < n; i ++) { ret += p[i]; index ++; } } while(ret.size() < n) ret += '0'; return ret; } int main() { freopen("F://Temp/input.txt", "r", stdin); int n; scanf("%d %s %s", &n, A, B); string A2, B2; int Ae = get_e(A); int Be = get_e(B); A2 = get_base(A, n, Ae); B2 = get_base(B, n, Be); if(n == 0) printf("YES 0.*10^0\n"); else if(Ae == Be && A2 == B2) printf("YES 0.%s*10^%d\n", A2.c_str(), Ae); else printf("NO 0.%s*10^%d 0.%s*10^%d\n", A2.c_str(), Ae, B2.c_str(), Be); return 0; }