zoukankan      html  css  js  c++  java
  • 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.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



    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    vector<char>va;
    vector<char>vb;
    int n;
    vector<char> change(char s[],int &index){
    	int point=-1;
    	int firstchar=-1;
    	int len=strlen(s);
    	vector<char>tmp;
    	int i, j;
    	for(i=0;i<len;i++){
    		if(s[i]=='.'){
    			point=i;
    			continue;
    		}
    		if(s[i]!='0'||firstchar!=-1){
    			if(firstchar==-1){
    				firstchar=i;
    			}
    			tmp.push_back(s[i]);
    		}
    	}
    	if(point==-1){
    		index=i;
    	}else if(point<firstchar){
    		index=-(firstchar-point-1);
    	}else{
    		index=point-firstchar;
    	}
    	if(point==-1&&firstchar!=-1){//字符串为s=0000000001的情况 
    		index=len-firstchar;
    	}
    	len = tmp.size();
    	if(len==0){//字符串为s=0的情况; 
    		index=0;
    	}
    	for(i=len;i<n;i++){
    		tmp.push_back('0'); 
    	}
    	return tmp;
    }
    int main(){
    	char a[120],b[120];
    	scanf("%d %s %s",&n,a,b);
    	int aindex,bindex;
    	va=change(a,aindex);
    	vb=change(b,bindex);
    	int flag=0;
    	for(int i=0;i<n;i++){
    		if(va[i]!=vb[i]){
    			flag=1;
    			break;
    		}
    	}
    	if(flag==0){
    		printf("YES 0.");
    		for(int i=0;i<n;i++){
    			printf("%c",va[i]);
    		}
    		printf("*10^%d
    ",aindex);
    	}else {
    		printf("NO 0.");
    		for(int i=0;i<n;i++){
    			printf("%c",va[i]);
    		}
    		printf("*10^%d 0.",aindex);
    		for(int i=0;i<n;i++){
    			printf("%c",vb[i]);
    		}
    		printf("*10^%d
    ",bindex);
    	}
    	return 0;
    } 


  • 相关阅读:
    面试题32_3:之字形打印二叉树
    面试题21_2:调整数组顺序使奇数位于偶数之前(各数之间的相对位置不变)
    面试题21:调整数组顺序使奇数位于偶数前面
    面试题32_2:分行从上到下打印二叉树
    面试题32:从上到下打印二叉树
    面试题31:栈的压入、弹出序列
    面试题30:包含min函数的栈
    二分图的最大匹配
    链式前向星+次短路
    次小生成树
  • 原文地址:https://www.cnblogs.com/grglym/p/7818753.html
Copyright © 2011-2022 走看看