zoukankan      html  css  js  c++  java
  • ZOJ 1125 Floating Point Numbers

    原题链接

    题目大意:给一个16位的数字,表示一个浮点数,按照规则转换成科学计数法表示。

    解法:注释比较清楚了,注意浮点运算的四舍五入问题。

    参考代码:

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<iomanip>
    #include<string.h>
    using namespace std;
    
    int main(){
    	char in[16],out[16];
    	int i,j,n,exp,man,zero;
    	double num;
    
    	cout<<"Program 6 by team X"<<endl;	//废话不能少,否则WA
    	while(scanf("%s",in)!=EOF){
    		man=0;
    		exp=0;
    		zero=1;
    		if(in[0]=='1')out[0]='-';
    		else out[0]=' ';
    		for(i=1;i<8;i++){
    			exp=exp<<1;			//注意,移位的时候后面不能再跟算式,否则出错
    			exp+=(in[i]-'0');	//处理的是字符,要用ASCii码比较
    			if(in[i]!='0')zero=0;
    		}
    		exp=exp-63;
    		for(i=8;i<16;i++){
    			man=man<<1;
    			man+=(in[i]-'0');
    			if(in[i]!='0')zero=0;
    		}
    		num=(1+double(man)/256)*pow(2.0,exp);
    		exp=0;
    		if(num>10-1e-6){
    			while(num>10-1e-6){
    				num/=10;
    				exp++;
    			}
    		}
    		else if(num<1.0+1e-6){
    			while(num<1.0+1e-6){
    				num*=10;
    				exp--;
    			}
    		}
    		if(zero)cout<<" 0.000000e+000";
    		else{
    			cout<<out[0];
    			printf("%.6fe",num);
    			if(exp>=0){
    				cout<<"+0";
    				if(exp<10)cout<<'0';
    				cout<<exp;
    			}
    			else{
    				cout<<"-0";
    				if(exp>-10)cout<<'0';
    				cout<<-exp;
    			}
    		}
    		cout<<endl;
    	}
    	cout<<"End of program 6 by team X";
    	return 0;
    }
  • 相关阅读:
    jQuery $.each用法
    《星际穿越》:一手烧脑一手催泪
    onkeyup,onkeydown和onkeypress
    Java 正则表达式
    Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
    Java网络编程
    Java 网络编程
    JAVA的网络编程
    Java集合容器简介
    Java多线程学习(吐血超详细总结)
  • 原文地址:https://www.cnblogs.com/naive/p/3568796.html
Copyright © 2011-2022 走看看