a+b??
大數浮點數運算
/***********************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char x[500],y[500];
while(scanf("%s %s",x,y)==2)
{
int n=strlen(x),m=strlen(y);
unsigned int ans[61]={0},ans2[501]={0};
int flag1=n,flag2=m,a,b,c;
for(a=0;a<n;a++) if(x[a]=='.') break;
for(b=0;b<m;b++) if(y[b]=='.') break;
flag1=a;
flag2=b;
for(a=flag1-1,b=0;a>=0;a--,b++) ans[b]=ans[b]+x[a]-48;
for(a=flag2-1,b=0;a>=0;a--,b++)
{
ans[b]=ans[b]+y[a]-48;
if(ans[b]>=10)
{
ans[b+1]=ans[b+1]+ans[b]/10;
ans[b]%=10;
}
}
for(a=flag1+1,b=0;a<n;a++,b++) ans2[b]=ans2[b]+x[a]-48;
for(a=flag2+1,b=0;a<m;a++,b++) ans2[b]=ans2[b]+y[a]-48;
for(a=500;a>=0;a--)
{
if(ans2[a]>=10&&a!=0)
{
ans2[a-1]+=ans2[a]/10;
ans2[a]%=10;
}
if(ans2[a]>4&&a==200) ans2[199]++;
if(ans2[a]>=10&&a==0)
{
ans[0]+=ans2[a]/10;
ans2[a]%=10;
}
}
if(ans[0]>=10)
for(a=0;a<=200;a++)
if(ans[a]>=10)
{
ans[a+1]+=ans[a]/10;
ans[a]%=10;
}
else break;
int flag=0;
for(a=60;a>=0;a--)
if(ans[a]!=0)
{
for(b=a;b>=0;b--)
printf("%lu",ans[b]);
flag=1;
break;
}
if(flag==0)
printf("0");
printf(".");
for(a=0;a<200;a++)
printf("%lu",ans2[a]) ;
printf("\n");
}
return 0;
}
/*************************************************/
作法II:缺乏停止條件 只好從測資數作判斷
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void point(unsigned int poii[])
{
char cha;
int top=1;
poii[0]=getchar()-48;
while(cha=getchar())
{
if(cha==' '||cha=='\n') break;
poii[top]+=cha-48;
poii[top-1]=poii[top-1]+poii[top]/10;
poii[top]%=10;
top++;
}
}
int input(unsigned int poii[])
{
char cha,flag=1;
int x=0;
while(cha=getchar())
if(cha!=' '&&cha!='\n') break;
if(cha!='-')
x=x*10+cha-48;
else flag=-1;
while(cha=getchar())
{
if(cha==' '||cha=='\n') break;
if(cha=='.')
{point(poii);break;}
x=x*10+cha-48;
}
return x*flag;
}
main()
{
int time=0;
while(1)
{
time++;
int a,b;
unsigned int poii[500]={0};
int n,m;
n=input(poii);
m=input(poii);
if(poii[200]>4)
{
poii[199]++;
if(poii[199]>=10)
for(a=199;a>=1;a--)
if(poii[a]>=10)
{
poii[a-1]=poii[a-1]+poii[a]/10;
poii[a]%10;
}
}
if(poii[0]>=10)
{n++;poii[0]%=10;}
printf("%d.",n+m);
for(b=0;b<200;b++)
printf("%lu",poii[b]);
printf("\n");
if(time>=100000) break;
}
return 0;
}
上一篇:矩形之內接三角形面積
下一篇:幼稚的基礎數論