科学计数法的值

Posted hello_OK

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了科学计数法的值相关的知识,希望对你有一定的参考价值。

科学计数法是一种数学专用术语。将一个数表示成 a×10的n次幂的形式,其中1≤|a|<10,n为整数,这种记数方法叫科学计数法。例如920000可以表示为9.2*10^5

现在需要对输入的字符串进行分离,自动识别该科学计数法中的a和幂次,计算其表征的具体数值并输出该值。

例如,对于输入的复数字符串“9.210^5”,输出 The actual value for 9.210^5 is 920000

注意:

1、每组测试数据仅包括一个用于科学计数法的字符串。

2、输入字符串保证合法。

3、字符串长度不超过1000

4、幂次不超过200

输入示例:

9.2*10^5

输出示例:

The actual value for 9.2*10^5 is 920000

 

 

--------------------------------------------------------------

             参考代码

--------------------------------------------------------------

欢迎指教!

 

#include<stdio.h>
#include<iostream>
#include<string>
#include<sstream>
//<sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。
using namespace std;
int main()
{
    string str;
    while(cin>>str)
    {
        string ans;//记录底数部分 
        bool flag,isSign,isMinus;
        int i;
        
        int len=str.size();//返回字符串长度 
        string::size_type loc=str.find("^");//查找^ 
        //找不到abc会返回-1,不为0为True。0为False 
        //任何存储string的size操作结果的变量必须为string::size_type类型。
        
        //检查指数部分是否为正 
        if(str[loc+1]!=-) 
            isSign=false;
        else 
            isSign=true;
            
        if(!isSign)//指数部分为正 
        {
            int intcnt=0;//记录底数整数部分长度 
            for(i=0;str[i]!=* && str[i]!=.;i++)
            {
                ans+=str[i];
                intcnt++;
            }
            
            if(str[i]==.)     i++;//跳过小数点 
                
            int cnt=0;//记录底数小数部分长度 
            for(;str[i]!=*;i++)
            {
                ans+=str[i];
                cnt++;
            }

            int record;//记录指数数值 
            string tmp;//中间 
            stringstream ss;//
            
            if(loc==string::npos) 
                record = 1;
            else
            {
                for(i=loc+1;i<len;i++)//记录指数部分 
                    tmp+=str[i];

                ss<<tmp;//String
                ss>>record;//int
            }
            //判断是否不存在小数点 
            if(record<cnt)    
                flag = false;
            else    
                flag=true;
            
            int len1=ans.size();//底数部分长度 
            if(flag)//纯整数 
            {
                cout<<"The actual value for "<<str<<" is "<<ans;
                for (i=record-cnt;i>0;i--)    
                    cout<<"0";                    
                cout<<endl;
            }
            else//有小数点 
            {
                cout<<"The actual value for "<<str<< " is ";
                for (i=0;i<intcnt+record;i++)    
                    cout<<ans[i];    
                cout << ".";
                for (i=intcnt+record;i<len1;i++)    
                    cout<<ans[i];
                cout<<endl;
            }
        }
        else//指数部分为负
        {
            if(str[0]==-)
            {
                str.erase(0,1);
                isMinus = true;
            }
            else
            {
                isMinus = false;
            }
            
            len=str.size();
            int intcnt=0;
            for(i=0;str[i]!=* && str[i]!=.; i++)
            {
                ans += str[i];
                intcnt++;
            }
            if(str[i]==.)
                i++;
            for(;str[i]!=*;i++)
                ans += str[i];
            
            int record;
            string tmp;
            stringstream ss;
            if(loc==string::npos)
                record=1;
            else
            {
                if(isMinus)
                    for(i=loc+1;i<len;i++)    
                        tmp+=str[i];
                else
                    for(i=loc+2;i<len;i++)    tmp+=str[i];
                ss<<tmp;
                ss>>record;
            }
            cout<<"The actual value for "<<str<<" is ";
            if(isMinus)
                cout<<"-";
            cout<<"0.";
            
            for(i=0;i<record-intcnt;i++)    
                cout<<"0";
            cout<<ans<<endl;
        }
    }
    return 0;
}

 

以上是关于科学计数法的值的主要内容,如果未能解决你的问题,请参考以下文章

使用 getItemValueDouble 返回的科学记数法

显示没有科学记数法的双变量的值

PHPExcel如何把该列的值设置为文本无科学计数?

科学计数法中e和E的区别

JAVA Double去掉科学计数"E"

显示附加数字而不是科学记数法