zoukankan      html  css  js  c++  java
  • PAT 1024 科学计数法

    题目

    /*
     1024. 科学计数法 (20)
    
     科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。
     
     现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。
     
     输入格式:
     
     每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。
     
     输出格式:
     
     对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
     
     输入样例1:
     +1.23400E-03
     输出样例1:
     0.00123400
     输入样例2:
     -1.2E+10
     输出样例2:
     -12000000000
     */
    

    思路

    // 符号原样输出
    // 有效数字保存到字符串
    // 根据后面数字的正负
    // 如果是正数,加点或加零。
    // 如果是负数,加零再加点。
    // 什么是有效位?1.234 00 中00 也是有效位?
    

    代码

    1、方法一

    #include <stdio.h>
    #include <string>
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    int main(){
    	
    //	while(1){
    	// 输出符号
    	char sign;
    	cin >> sign;
    	if(sign == '-')cout << sign;
    	
    	// 得到有效数字串、指数符号、指数
    	char num[10005];
    	char signE;
    	char e[10005];
    	scanf("%s",num);
    	int len = (int)strlen(num);
    	int j = 0;
    	int tag = -1;
    	for (int i = 0; i < len; ++i) {
    		
    		if (tag == 1)e[j++] = num[i];
    		
    		if (tag == 0) {
    			signE = num[i];
    			tag = 1;
    		}
    		if (num[i] == 'E') {
    			num[i] = 0;
    			tag = 0;
    		}
    	}
    	e[j]=0;
    	
    	
    		
    //	scanf("%sE%c%s",num,&signE,e);
    //	cin.getline(num,10000,'E');
    //	cin >> signE;
    //	cin.getline(e, 10000);
    	string numStr = num;
    	int eInt = atoi(e);
    	numStr.erase(numStr.begin()+1);
    	
    	if(signE == '+'){
    		if (eInt < numStr.length() - 1) {
    			numStr.insert(eInt+1,".");
    		}else if (eInt > numStr.length() - 1){
    			numStr.append(eInt - numStr.length() + 1 , '0');
    		}
    //		// 去掉开头多余的0
    //		//如果不是字符串开头有零,并且零的后面没有'.'也不是末尾
    //		int i = 0;
    //		
    //		while (i < numStr.length() && numStr[i] == '0') {
    //			if (i + 1 == numStr.length() || ((i + 1 != numStr.length()) && numStr[i+1] == '.')) {
    //				break;
    //			}
    //			numStr.erase(numStr.begin());
    //		}
    	}else{
    		if (eInt >= 1) {
    			numStr.insert(0, eInt, '0');
    		}
    		numStr.insert(1, ".");
    	}
    	cout << numStr << endl;
    
    //	}
    
    }
    

    2、方法二 | 使用正则输入

    #include <stdio.h>
    #include <string>
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    int main(){
    	
    	// 输出符号
    	char sign;
    	cin >> sign;
    	if(sign == '-')cout << sign;
    	
    	// 得到有效数字串、指数符号、指数
    	char num[10005];
    	char signE;
    	char e[10005];
    	
    	char gewei;
    	//	符号、个位、.、小数、E、符号、指数
    	scanf("%c.%[0-9]E%c%[0-9]",&gewei,num+1,&signE,e);
    	num[0]=gewei;
    	
    	string numStr = num;
    	int eInt = atoi(e);
    	
    	if(signE == '+'){
    		if (eInt < numStr.length() - 1) {
    			numStr.insert(eInt+1,".");
    		}else if (eInt > numStr.length() - 1){
    			numStr.append(eInt - numStr.length() + 1 , '0');
    		}
    
    	}else{
    		if (eInt >= 1) {
    			numStr.insert(0, eInt, '0');
    		}
    		numStr.insert(1, ".");
    	}
    	cout << numStr << endl;
    
    	
    }
    
  • 相关阅读:
    书单
    部署邮件系统
    解决配置文件注释太多的方法
    SHELL脚本自动备份
    如何在 Centos7 中修改yum源(三种方法)
    关于油猴子脚本的下载和使用方法
    问卷星全自动刷流量
    实验四、EIGRP 高级实验
    CentOS7修改主机名的三种方法
    IntelliJ IDEA 2018.3 x64的破解和安装
  • 原文地址:https://www.cnblogs.com/tangyikejun/p/4300372.html
Copyright © 2011-2022 走看看