a+b??
作法 : 大數浮點數加法
之前寫的太雜亂 且效率不好 在此做修正
/***********************************************************/
#include<stdlib.h>
#include<stdio.h>
main()
{
char A[500],B[500];
while(scanf("%s %s",&A,&B)==2)
{
int PA=0,PB=0,a,b,c,MAX=0;
for(a=0;A[a]!='\0';a++)
if(A[a]=='.') {PA=a;break;}
for(a=0;B[a]!='\0';a++)
if(B[a]=='.') {PB=a;break;}
int Double[301]={0}; /*前50格 整數(0~50) 後給小數點*/
for(a=0,b=50-PA;A[a]!='\0';a++,b++)
Double[b]=A[a]-'0';
MAX=a-PA;
for(a=0,b=50-PB;B[a]!='\0';a++,b++)
Double[b]+=(B[a]-'0');
Double[50]=0;
if(a-PB>MAX) MAX=a-PA;
for(a=MAX+50;a>=1;a--)
{
if(a==250&&Double[a+1]>=5) Double[a]++;
if(a==51)
{
Double[a-2]=Double[a-2]+Double[a]/10;
Double[a]%=10;
}
else
{
Double[a-1]=Double[a-1]+Double[a]/10;
Double[a]%=10;
}
}
for(a=0;a<=250;a++)
if(Double[a]!=0)
{
for(b=a;b<50;b++)
putchar(Double[b]+'0');
if(a>=50) putchar('0');
putchar('.');
for(b=51;b<=250;b++)
putchar(Double[b]+'0');
break;
}
puts("");
}
return 0;
}
上一篇:重複排列 (修正版)
下一篇:獨角獸查理