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;
    }
  • 相关阅读:
    解析Javascript事件冒泡机制(转)
    JavaScript事件处理的三种方式(转)
    javaScript中"=="和"==="运算符的区别
    博客
    基础知识巩固二
    基础知识巩固
    知识小结(浮点数问题)
    关于电脑桌面图标消失并且右键无法点击的情况
    JS随笔(二)
    关于JS学习笔记
  • 原文地址:https://www.cnblogs.com/naive/p/3568796.html
Copyright © 2011-2022 走看看