PAT [A1060]-Are They Equal
来源:互联网 发布:禁止网游软件 编辑:程序博客网 时间:2024/05/17 19:20
PAT [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
解题思路:
字符串操作,注意0.0, 0.001等数据
sprintf可以将数字传进对应的char数组,然后再转入string中
AC代码:
#include <cstdio>#include <cstring>#include <string>#include <iostream>using namespace std;const int maxn = 110;int N;string A, B;string trans(int N, string dat){ string ans = "", sub = ""; int pPos = dat.length(), nPos = -1, lenT = dat.length(); // 定位小数点与第一个非0数字的位置 for (int i = 0; i < dat.length(); i++){ if (dat[i] == '.') { pPos = i; break; } } for (int i = 0; i < dat.length(); i++){ if (dat[i] != '0' && dat[i] != '.') { nPos = i; break; } } // 若位数目不够,则补0 if (lenT - nPos - 1 < N){ for (int i = 0; i < (N - lenT - nPos + 1); i++){ dat += "0"; } } // 输入为0 if (nPos == -1) { for (int i = 0; i < N; i++){ sub += "0"; } ans = "0." + sub + "*10^0"; } // 输入不为0 else{ int len = pPos - nPos; // 如果len>0,代表整数部分不为0 if (len > 0){ // 若无小数点或截取部分没有超出整数部分,则只截取整数部分, 否则还需要截取小数部分 if (pPos == lenT || N <= len) sub = dat.substr(nPos, N); else{ sub = dat.substr(nPos, len) + dat.substr(pPos + 1, N - len); } } // 如果len<0,代表整数部分为0,应为10的(len+1)次方 else{ len += 1; sub = dat.substr(nPos, N); } // 将数组传进string char lenS[maxn]; sprintf(lenS, "%d", len); string lenStr = lenS; ans = "0." + sub + "*10^" + lenS; } return ans;}int main(){ freopen("C:\\Users\\Administrator\\Desktop\\test.txt", "r", stdin); while (scanf("%d", &N) != EOF){ cin >> A >> B; //cout << A << " "<< B << endl; string ansA = trans(N, A), ansB = trans(N, B); if (ansA == ansB) cout << "YES " << ansA << endl; else cout << "NO " << ansA << " " << ansB << endl; } fclose(stdin); return 0;}
- PAT [A1060]-Are They Equal
- PAT-A1060. Are They Equal (25)
- PAT A1060. Are They Equal (25)
- PAT A1060 are they equal (25)
- pat-a1060. Are They Equal (25)
- A1060.Are They Equal
- PAT 1060 Are They Equal
- PAT 1060. Are They Equal
- PAT 1060. Are They Equal
- PAT 1060. Are They Equal
- 【PAT】1060. Are They Equal
- PAT 1060 Are They Equal?
- PAT 1060 Are They Equal
- PAT A1060 Are They Equal 我的思路不太好,25分得了19分。其实还是有很大纰漏的!
- 1060. Are They Equal (25)-PAT
- pat 1060. Are They Equal (25)
- PAT A 1060. Are They Equal (25)
- PAT 1060. Are They Equal (25)
- python---python语句讲解for、while、布尔值
- 三角形最大和问题
- MacOS 开发
- [Unity 设计模式]桥接模式(BridgePattern)
- Lintcode最后一个单词的长度
- PAT [A1060]-Are They Equal
- 其他BlockingQueue实现类
- 一些常考的智力题
- poj 1144 Network(Tarjan求割点)
- jni.h no such file or directory(第一次使用JNI的常见问题)
- 10种简单的Java性能优化
- Headmaster's Headache UVA
- struts2_拦截器与注解开发
- 【微信小程序】实现属于自己的美美哒弹窗