首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

算长浮点数的有关问题:比如11~111.2+1.222~2=

2012-03-20 
算长浮点数的问题:比如11~111.2+1.222~2?这是我写的代码编译是弹出停止工作的对话框希望高手指正~#includ

算长浮点数的问题:比如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++模版来复制你的程序代码。我们看起好累啊。哪有那么多时间来看啊

热点排行