PAT(甲级)1060
来源:互联网 发布:葫芦娃 知乎 编辑:程序博客网 时间:2024/05/29 04:04
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
<pre name="code" class="cpp">#include <iostream>#include <cstring>#include <stack>using namespace std;/////////////////////////////////////////////////////////////////////////// THIS METHOD IS TOO COMPLEX,PLEASE TRY ANOTHER NEST JUST RECORDING//N BITS FROM ORIGINAL STRING.EG 12315646.15648641.. STRAT RECORDING// FROM FIRST NON-ZERO BIT, THEN COUNTING n BITS, IF IT CAME TO NULL// ADDING ZEROS INSTEAD UNTIL THE NUMBERS OF BITS IS N////every data should be as the form 0.d1d1...*10^k including 0.0000..*10^0//0.123455..dn should be 0.123455dn*10^0void itoa(int n,char str[],int base){stack<char> s;if(n==0){str[0] = '0';str[1] = '\0';return;}//cout <<n <<endl;while(n){s.push('0'+n%base);n /=base;}int i =0,size = s.size();for(i = 0;i<size;i++){str[i] = s.top();s.pop();}str[i] = '\0';}char * transfer(char *str,int n){char *res = new char[250];res[0] = '0';res[1] = '.'; char *pstart,*pdot,*p; p = str; pstart = pdot = NULL; bool found1 =false; while(*p != '\0'){ if(*p > '0' && *p <='9' && !found1){ pstart =p; found1 =true;}else if(*p == '.') pdot = p;p++;}int count;if(pstart == NULL){ //zerosp =res+2;for(int i = 0;i<n;i++){*p = '0';p++;}*p = '\0';strcat(res,"*10^0");return res;}else if(pstart != NULL && pdot == NULL){ //no fraction partcount = p -pstart;if(n <=count){memcpy(res+2,pstart,sizeof(char)*n);p = res+2+n;}else{memcpy(res+2,pstart,sizeof(char)*count);p = res+2+count;for(int i=0;i<n-count;i++){ //pading zeros*p ='0';p++;}}*p = '\0';strcat(res,"*10^");//cout <<count <<endl; char exp[250];itoa(count,exp,10);strcat(res,exp); return res;}else { if(pdot < pstart) { //only fraction part count = pstart - pdot -1;int count1 = p - pstart;if(count1 >=n){memcpy(res+2,pstart,sizeof(char)*n);p =res+2+n;} else{ memcpy(res+2,pstart,sizeof(char)*count1); p = res+2+count1; for(int i = 0;i<n-count1;i++){ //pading zeros to n width *p = '0'; p++;}} *p ='\0'; // cout <<count <<endl; char exp[250]; itoa(count,exp,10); strcat(res,"*10^-"); strcat(res,exp); return res;}else{ //integer part adding fraction partint count = pdot -pstart; //exponentint count1 = p-pstart-1; //valid bitsif(count <= n) memcpy(res+2,pstart,sizeof(char)*count);else{ memcpy(res+2,pstart,sizeof(char)*n); p = res+2+n; goto LABEL1;}if(count1 >=n){ memcpy(res+2+count,pdot+1,sizeof(char)*(n-count));p =res+2+n;} else{ memcpy(res+2+count,pdot+1,sizeof(char)*(count1-count)); p = res+2+count1; for(int i=0;i<n-count1;i++){ *p ='0'; p++;}}LABEL1: *p ='\0'; strcat(res,"*10^");// cout <<count <<endl; char exp[250]; itoa(count,exp,10); strcat(res,exp); return res;}}}int main(){char str1[250];char str2[250];int num;cin >>num >>str1 >>str2; char *p1,*p2; p1 = transfer(str1,num); p2 = transfer(str2,num); if(strcmp(p1,p2) == 0) cout <<"YES " <<p1 <<endl; else cout <<"NO " <<p1 <<' ' <<p2 <<endl; return 0;}
- PAT(甲级)1060
- *浙大PAT甲级 1060
- PAT甲级1060
- PAT 甲级
- PAT 甲级 1060 Are They Equal
- PAT甲级 A1025.PAT RANKING
- PAT 甲级 1025 PAT Ranking
- PAT(甲级)1003
- PAT(甲级)1004
- PAT(甲级)1005
- PAT(甲级)1006
- PAT(甲级)1007
- PAT(甲级)1008
- PAT(甲级)1009
- PAT(甲级)1010
- PAT(甲级)1011
- PAT(甲级)1012
- PAT(甲级)1013
- 关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- 图解Linux命令之--chattr命令
- 007:Reverse Integer
- Codevs P1669 运输装备
- 【数据结构与算法】Hash表
- PAT(甲级)1060
- 教你下载百度网盘已失效资源链接
- VS2012如何让两个或者多个项目共享同一个文件
- PAT(甲级)1061
- Python常用模块
- Android进阶之OptionsMenu+ContextMenu+subMenu
- linux多线程环境下的抢尸行为(system返回-1:No child processes)http://www.aiuxian.com/article/p-129935.html
- Android网络编程之JAVA IO流简单了解
- 关于ASP.NET MVC4中,下载APK文件错误