科学计数法的值
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; }
以上是关于科学计数法的值的主要内容,如果未能解决你的问题,请参考以下文章