整数部分存入栈中,方便计算
小数部分先存入字符数组中,等相加以后,再把结果存入栈中
再计算整数部分,结果存入栈中
不难,就是写起来有点麻烦
#include<iostream>
#include<stack>
#include<string.h>
using namespace std;
stack<char> x1inter,x2inter;
stack<int> resultfloat,resultinter; //存放整数部分和结果
int main(){
char x1[100],x2[100];
cin>>x1>>x2;
//把整数放到栈中,
int i;
char x1float[100],x2float[100]; //存储x1和x2的小数部分
int len1,len2; //记录x1x2的小数部分长度
int flag=0,k=0;
for(i=0;x1[i]!='\0';i++){
if(x1[i]=='.'){ //找到小数点,flag=1;
flag=1;
}
else if(!flag){ //没找到小数点说明在整数部分
x1inter.push(x1[i]);
}
else{ //小数部分
x1float[k++]=x1[i];
}
}
len1=k;
flag=0,k=0;
for(i=0;x2[i]!='\0';i++){
if(x2[i]=='.'){ //找到小数点,flag=1;
flag=1;
}
else if(!flag){ //没找到小数点说明在整数部分
x2inter.push(x2[i]);
}
else{ //小数部分
x2float[k++]=x2[i];
}
}
len2=k;
int currentsum=0,lastsum=0;
//计算小数
for(int i=max(len1,len2)-1;i>=0;i--){
if(i>len1-1){
currentsum=x2float[i]-'0';
resultfloat.push(currentsum);
}
else if(i>len2-1){
currentsum=x1float[i]-'0';
resultfloat.push(currentsum);
}
else{ //相加
currentsum=lastsum+(x1float[i]-'0')+(x2float[i]-'0');
resultfloat.push(currentsum%10);
lastsum=currentsum/10;
}
}
//整数加法
//从后往前逐位相加,直到遇到小数点
while(!x1inter.empty() && !x2inter.empty()){
currentsum=lastsum+x1inter.top()-'0'+x2inter.top()-'0';
x1inter.pop();
x2inter.pop();
resultinter.push(currentsum%10);
lastsum=currentsum/10;
}
while(!x1inter.empty()){
currentsum=lastsum+x1inter.top()-'0';
x1inter.pop();
resultinter.push(currentsum%10);
lastsum=currentsum/10;
}
while(!x2inter.empty()){
currentsum=lastsum+x2inter.top()-'0';
x2inter.pop();
resultinter.push(currentsum%10);
lastsum=currentsum/10;
}
//输出
while(!resultinter.empty()){
cout<<resultinter.top();
resultinter.pop();
}
cout<<".";
while(!resultfloat.empty()){
cout<<resultfloat.top();
resultfloat.pop();
}
return 0;
}