1060 Are They Equal 发表于 2020-05-31 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include <iostream>#include <cstring> using namespace std;int main() { int n, p = 0, q = 0; char a[10000], b[10000], A[10000], B[10000]; scanf("%d%s%s", &n, a, b); int cnta = strlen(a), cntb = strlen(b); for(int i = 0; i < strlen(a); i++) { if(a[i] == '.') { cnta = i; break; } } for(int i = 0; i < strlen(b); i++) { if(b[i] == '.') { cntb = i; break; } } // cnta和cntb为a和b两个字符串的小数点下标,初始值为字符串长度 int indexa = 0, indexb = 0; while(a[p] == '0' || a[p] == '.') p++; while(b[q] == '0' || b[q] == '.') q++; // p和q为非0非小数点的下标 if(cnta >= p) cnta = cnta - p; else cnta = cnta - p + 1; if(cntb >= q) cntb = cntb - q; else cntb = cntb - q + 1; if(p == strlen(a)) cnta = 0; if(q == strlen(b)) cntb = 0; while(indexa < n) { if(a[p] != '.' && p < strlen(a)) A[indexa++] = a[p]; else if(p >= strlen(a)) A[indexa++] = '0'; p++; } while(indexb < n) { if(b[q] != '.' && q < strlen(b)) B[indexb++] = b[q]; else if(q >= strlen(b)) B[indexb++] = '0'; q++; } // index从0到n-1保存有效数字(有效数字不够用0补) // b[q] != '.'是有必要的,比如10.或则是10.1 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;}