double小数没了
  • 板块学术版
  • 楼主_8008008
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/4/19 13:38
  • 上次更新2024/4/19 18:13:42
查看原帖
double小数没了
803885
_8008008楼主2024/4/19 13:38
#include<iostream>
#include<string>
#include<vector>
#include<math.h>
#include<cmath>
#include<algorithm>
using namespace std;
double getnum(string str){
	double num1=0,num2=0;
	int p1=0,p2,f=1;
	if(str[p1]=='-')f=-1,p1++;
	for(p1;p1<str.size();p1++){
		if(str[p1]=='.')break;
		num1=num1*10+str[p1]-'0';
	}
	for(p2=p1+1;p2<str.size();p2++){
		num2=num2*10+str[p2]-'0';
	}
	for(int i=1;i<=(int)str.size()-p1-1+(p1==-1);i++){
		num2/=10;
	}
    printf("num1=%lf num2=%lf\n",num1,num2);
	double ans=num1+num2;
    //if(f==-1)ans=-ans;
	return ans;
}
string getstring(string str,int l,int r){
	string ans;
	for(int i=l;i<=r;i++)ans+=str[i];
	return ans;
}
double deal(string str){
	int i=0,j=0,k=0;
	bool flag=true;
	for(i=0;i<str.size();i++){
		if(str[i]=='-')continue;
		if(str[i]>'9'||str[i]<'0')flag=false;
	}
	cout<<"flag="<<flag<<'\n';
	if(flag)return getnum(str);
	string type;
	i=0;
	while('a'<=str[i]&&'z'>=str[i]){
		type+=str[i];
		i++;
	}
	int le=0,ri=0;
	vector<int>vec;
	vec.push_back(0);
	for(i=0;i<str.length();i++){
		if(str[i]=='(')le++;
		if(str[i]==')')ri++;
		if(str[i]==','&&le==ri+1){
			vec.push_back(i);
		}
	}
	vec.push_back(str.size()-1);
	if(type=="add"){
		cout<<"4-"<<vec[1]-1<<" "<<vec[1]+1<<"-"<<vec[2]-1<<endl;
		return deal(getstring(str,4,vec[1]-1))+deal(getstring(str,vec[1]+1,vec[2]-1));
	}
	if(type=="sub"){
		return deal(getstring(str,4,vec[1]-1))-deal(getstring(str,vec[1]+1,vec[2]-1));
	}
	if(type=="time"){
		return deal(getstring(str,4,vec[1]-1))*deal(getstring(str,vec[1]+1,vec[2]-1));
	}
	if(type=="div"){
		return deal(getstring(str,4,vec[1]-1))/deal(getstring(str,vec[1]+1,vec[2]-1));
	}
	if(type=="pow"){
		return pow(deal(getstring(str,4,vec[1]-1)),deal(getstring(str,vec[1]+1,vec[2]-1)));
	}
}
int main(){
	cout<<getnum("114514.19");
//	cout<<fixed<<deal("114514");
}

输出结果

num1=114514.000000 num2=0.190000
114514

ans=num1+num2 然后 ans 变整数了,ans 也是 double 型啊

2024/4/19 13:38
加载中...