zoukankan      html  css  js  c++  java
  • 1060. Are They Equal (25)

    题目连接:https://www.patest.cn/contests/pat-a-practise/1060

    原题如下:

    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
    
    失落……
    考察科学计数法,关键在于小数点和第一个有效位的位置的确定。
    参考了他人的代码http://blog.csdn.net/xtzmm1215/article/details/38809629
     1 #include<stdio.h>
     2 #define MAXN 105
     3 #include<string.h>
     4 #include<stdlib.h>
     5 struct result{
     6     char d[MAXN];
     7     int k;
     8 };
     9 
    10 result getResult(char *a,int n)
    11 {
    12     int firstPos=-1,pointPos=-1;
    13     int index=0;
    14     result r;
    15     int i=0;
    16     for ( i=0;a[i];i++)
    17     {
    18         if (a[i]=='.')
    19         {
    20             pointPos=i;
    21             continue;
    22         }
    23         if (firstPos==-1 && a[i]=='0')continue;
    24         else
    25         {
    26             if (firstPos==-1 && a[i]!='0')
    27             {
    28                 firstPos=i;
    29             }
    30             if (index<n)
    31             {
    32                 r.d[index++]=a[i];
    33             }
    34         }
    35     }
    36         r.d[index]=0;
    37 
    38         if (pointPos==-1)pointPos=i;
    39         if (pointPos-firstPos<0)r.k=pointPos-firstPos+1;
    40         else r.k=pointPos-firstPos;
    41 
    42         int j;
    43         if (index==0)
    44         {
    45             for (j=0;j<n;j++)r.d[j]='0';
    46             r.d[j]=0;
    47             r.k=0;
    48         }
    49     return r;
    50 }
    51 
    52 int main()
    53 {
    54     int N;
    55     scanf("%d",&N);
    56     char s1[MAXN],s2[MAXN];
    57     result r1,r2;
    58     scanf("%s %s",s1,s2);
    59     r1=getResult(s1,N);
    60     r2=getResult(s2,N);
    61     if (strcmp(r1.d,r2.d)==0 && r1.k==r2.k)
    62     {
    63         printf("YES 0.%s*10^%d",r1.d,r1.k);
    64     }
    65     else printf("NO 0.%s*10^%d 0.%s*10^%d",r1.d,r1.k,r2.d,r2.k);
    66     return 0;
    67 }
    
    
  • 相关阅读:
    iOS:hidesBottomBarWhenPushed的正确用法
    清理缓存
    iOS常见问题(2)
    iOS常见问题(1)
    Xcode文档下载与安装路径
    文本属性Attributes
    NSAttributedString
    protocol
    类的本质、description方法、SEL、NSLog输出增强
    分类-Category
  • 原文地址:https://www.cnblogs.com/wuxiaotianC/p/6439399.html
Copyright © 2011-2022 走看看