算长浮点数的问题:比如11~111.2+1.222~2=?
这是我写的代码
编译是弹出停止工作的对话框
希望高手指正~
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int c=0;//进位加c
char ch[102],ch2[102],str[200];
for(int i=198;i>=0;i--)//---------------------------------用'0'初始化-->29
{
str[i]='0';
}str[199]='\0';
cin>>ch>>ch2;
bool iff=0;
for(int i=0;i<101;i++)
{
if(ch[i]=='\0')
iff=1;
if(iff)
ch[i]='0';
}ch[101]='\0';
iff=0;
for(int i=0;i<101;i++)
{
if(ch2[i]=='\0')
iff=1;
if(iff)
ch2[i]='0';
}ch2[101]='\0';
int L,L2;//-------------------------------------比较小数点的位数-->42
for(int i=0;i<101;i++)
{
if(ch[i]=='.')
{
L=i;
}
if(ch2[i]=='.')
{
L2=i;
}
}
int len=abs(L-L2);//------------------------尾部多出的-->58
int j=198,p,q;
if(L>L2)
{
for(q=100;q>100-len;q--,j--)
{
str[j]=ch2[q];
}
}
else
{
for(p=100;p>100-len;p--,j--)
{
str[j]=ch[p];
}
}
if(L>L2)//-------------------------------------小数点后相加-->88
{
for(;p>L;p--,q--,j--)
{
str[j]='0'+((ch[p]-'0')+(ch2[q]-'0')+c);
if(((ch[p]-'0')+(ch2[q]-'0')+c)>9)
{
str[j]=str[j]%10;
c=1;
}
else
c=0;
}
}
else
{
for(;q>L;q--,p--,j--)
{
str[j]='0'+((ch2[q]-'0')+(ch[p]-'0')+c);
if(((ch2[q]-'0')+(ch[p]-'0')+c)>9)
{
c=1;
str[j]=str[j]%10;
}
else
c=0;
}
}
ch[p]='.';
ch2[q]='.';
p++;q++;
if(L>L2)//------------------------------小数点前-->121
{
for(;q>=0;q--,p--,j--)
{
str[j]='0'+((ch2[q]-'0')+(ch[p]-'0')+c);
if(((ch2[q]-'0')+(ch[p]-'0')+c)>9)
{
c=1;
str[j]=str[j]%10;
}
else
c=0;
}
}
else
{
for(;p>=0;q--,p--,j--)
{
str[j]='0'+((ch2[q]-'0')+(ch[p]-'0')+c);
if(((ch2[q]-'0')+(ch[p]-'0')+c)>9)
{
c=1;
str[j]=str[j]%10;
}
else
c=0;
}
}
if(L>L2)//---------------------------------------------------首部多出一串-->131
{
for(;p>=0;p--,j--)
{
str[j]=('0'+(ch[p]-'0'+c));
if((ch[p]-'0'+c)<10)
c=0;
}
}
cout<<str;
system("pause");
}
[解决办法]
看晕了 检查下有没有越界问题 但不跟踪好像是对内存的非法写入 应该是越界问题
[解决办法]
楼主,你应该用C++模版来复制你的程序代码。我们看起好累啊。哪有那么多时间来看啊