又是一道字符串处理的题目。。。
题意:给出两个浮点数,询问它们保留n位小数的科学计数法(0.xxx*10^x)是否相等。根据是和否输出相应答案。
思路:
先分别将两个浮点数转换成相应的科学计数法的格式
1.point为小数点的索引,初始化为字符串的长度len
2.not0位第一个非0的数字的索引,初始化为len
如果not0为len,表明该浮点数为0,特殊处理,形式为0.0..0*10^0
否则根据point和not0的大小,计算相应的指数。
接着便是从str的not0开始,给ans赋值,共n位不包括小数点的数字,不足的最后补0即可。
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> using namespace std; const int maxn=200; char s1[maxn],s2[maxn]; int n; void solve(char*str,char*ans,int n,int &e){ int len=strlen(str); int point=len; //小数点的索引 for(int i=0;i<len;i++){ if(str[i]=='.'){ point=i; break; } } int not0=len; //第一个非0的索引 for(int i=0;i<len;i++){ if(str[i]!='.' && str[i]!='0'){ not0=i; break; } } //数字为0 if(not0==len){ e=0; ans[0]='0'; ans[1]='.'; for(int i=0;i<n;i++) ans[2+i]='0'; ans[n+2]='