• 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 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 (<) 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 1, 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.d[1]...d[N]*10^k (d[1]>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

    未全过代码
     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include <climits>
     3 #include<iostream>
     4 #include<vector>
     5 #include<queue>
     6 #include<map>
     7 #include<set>
     8 #include<stack>
     9 #include<algorithm>
    10 #include<string>
    11 #include<cmath>
    12 using namespace std;
    13 
    14 int main()
    15 {
    16     int N;
    17     float num1, num2;
    18     int p1, p2,n1,n2;
    19     p1 = p2 = 0;
    20     n1 = n2 = 0;
    21     cin >> N >> num1 >> num2;
    22     stack<int>S1, S2;
    23     while (num1 - floor(num1) != 0.0)
    24     {
    25         num1 *= 10.0;
    26         p1++;
    27     }
    28     while (num2 - floor(num2) != 0.0)
    29     {
    30         num2 *= 10.0;
    31         p2++;
    32     }
    33     int N1 = static_cast<int>(num1);
    34     int N2 = static_cast<int>(num2);
    35     while (N1)
    36     {
    37         S1.push(N1 % 10);
    38         N1 /= 10;
    39         n1++;
    40     }
    41     while (N2)
    42     {
    43         S2.push(N2 % 10);
    44         N2 /= 10;
    45         n2++;
    46     }
    47     n1 -= p1;
    48     n2 -= p2;
    49     int ans1 = 0, ans2 = 0;
    50     int s1 = 0, s2 = 0;
    51     for (int i = 0; i < N; i++)
    52     {
    53         if (!S1.empty()) {
    54             ans1 = ans1 * 10 + S1.top();
    55             S1.pop();
    56             s1++;
    57         }
    58         if (!S2.empty()) {
    59             ans2 = ans2 * 10 + S2.top();
    60             S2.pop();
    61             s2++;
    62         }
    63     }
    64     if (s1 != N) {
    65         ans1 *= 10;
    66         s1++;
    67     }
    68     if (s2 != N) {
    69         ans2 *=10;
    70         s2++;
    71     }
    72     if (ans1 == ans2 && n1 == n2)
    73     {
    74         if(ans1==0)
    75             cout << "YES "<< ans1;
    76         else
    77         {
    78             cout << "YES" << " 0." << ans1;
    79             if (n1 > 0)
    80                 cout << "*10^" << n1;
    81         }
    82     }
    83     else
    84     {
    85         cout << "NO ";
    86         cout << "0." << ans1;
    87         if (n1 > 0)
    88             cout << "*10^" << n1<<" ";
    89         cout << "0." << ans2;
    90         if (n2 > 0)
    91             cout << "*10^" << n1;
    92     }
    93 }
    View Code
  • 相关阅读:
    WM_COMMAND 和 WM_NOTIFY 的区别
    C 游戏所要看的书
    Source Insight中文字体设置
    在 windows7 中使用 vs2003 时,“在文件中查找”导致无响应的问题
    解决VS2008 调试启动特别慢
    c++ 浅谈 new 的使用
    Access界面基础操作
    与孩子一起学编程12章
    YT工作日志-0911
    两种方式遍历二叉树--递归方式和非递归方式
  • 原文地址:https://www.cnblogs.com/57one/p/12055324.html
Copyright © 2020-2023  润新知