1.9 0.1 0.1 0.9 1.23 2.1 3 4.0
2 1 3.33 7
实数a+b,只针对整数的运算........
很久以前就想尝试,今天终于搞出来了..........
恶心的要死,调试了一下午,才把所有要考虑的情况考虑到..........
其实就是字符串处理,主要是要注意各种特殊情况...........
献出几组测试数据:
0.1 0.02
0.1 0.9
1 2.0
1.9 0.1
9 10
1.23 2.1
1000 0.01
写的程序比较繁琐,完全是按自己的理解来做的..........
以后有机会再优化吧........
#include
#include
#include
using namespace std;
char a[1005],b[1005],sum[1005];
void mem()
{
memset(sum,0,sizeof(sum));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
void over(char s[])
{
int len=strlen(s);
for(int i=0;i=0;--i)
{
s[i+x]=s[i];
}
while(x--)
{
s[x]='0';
}
}
void change(char s[])
{
int len=strlen(s),cnt=0;
for(int i=0;ipb)//对位
{
move(b,pa-pb);
}
else
{
move(a,pb-pa);
}
int cnt=0;
for(int i=0;a[i]||b[i];++i)//累加
{
if(a[i]!='.')
{
sum[i]+=a[i]-(a[i]?'0':0)+b[i]-(b[i]?'0':0);
//++cnt;
}
else
{
sum[i]='.';
}
++cnt;
}
for(int i=0;i
大神的最优代码,然而并没有看懂....555
#include
#include
#define MAX 1000
char a[MAX],b[MAX],c[MAX];
int main()
{
int i,j,k,l,m,n,la,lb,mx;
char ch;
memset(a,'0',sizeof(a));
memset(b,'0',sizeof(b));
while(~scanf("%s%s",a,b))
{
la=strlen(a);
lb=strlen(b);
a[la]='0';
b[lb]='0';
i=0;
while((a[i]-'.')&&i(lb-j)?(la-i):(lb-j);
if(i>=j)
{
for(l=mx=i+m,k=0,j=i-j;l>=0;l--)
{
if(a[l]=='.')
{
c[l]='.';
continue;
}
ch=(l-j)<0?'0':b[l-j];
c[l]=(a[l]-'0'+ch-'0'+k)%10+'0';
k=(a[l]-'0'+ch-'0'+k)/10;
}
}
else
{
for(l=mx=j+m,k=0,j=j-i;l>=0;l--)
{
if(b[l]=='.')
{
c[l]='.';
continue;
}
ch=(l-j)<0?'0':a[l-j];
c[l]=(ch-'0'+b[l]-'0'+k)%10+'0';
k=(ch-'0'+b[l]-'0'+k)/10;
}
}
if(k>0)
printf("%d",k);
while(c[mx]=='0')
mx--;
if(c[mx]=='.')
mx--;
for(i=0;i<=mx;i++)
printf("%c",c[i]);
printf("\n");
memset(a,'0',sizeof(a));
memset(b,'0',sizeof(b));
}
}