当前位置: 代码迷 >> 综合 >> hdu-oj-1753-大明A+B
  详细解决方案

hdu-oj-1753-大明A+B

热度:59   发布时间:2023-12-19 11:39:52.0

今天学长让作这个题,思路和代码都会。

无非是作两次大树的加法,然后把小数点后的结果最后的leap值给整数使用/。

但是这个题目调试了很久很久,原因很简单,就是把m写成n了,之所以把m写成n,是因为求m和求n是一样的,我就直接把求n的复制给m了。

‘以后绝对不直接复制代码了。。。。。

555~~~~~

#include<stdio.h>
#include<string.h>
int main()
{int n,m,i,leap1,leap2,max,leap,cas;int a1[1000],a2[1000],b1[1000],b2[1000];int a[1000],b[1000],x[1000],y[1000];char str1[1000],str2[1000];while(scanf("%s%s",str1,str2)!=EOF){memset(a1,0,sizeof(a1));memset(a2,0,sizeof(a2));memset(b1,0,sizeof(b1));memset(b2,0,sizeof(b2));memset(x,0,sizeof(x));memset(y,0,sizeof(y));n=strlen(str1);m=strlen(str2);leap1=leap2=0;for(i=0;i<n;i++){if(str1[i]=='.'){leap1=i;for(i=i+1;i<n;i++){b1[i-leap1-1]=str1[i]-'0';}break;}a1[i]=str1[i]-'0';leap1++;}for(i=0;i<m;i++){if(str2[i]=='.'){leap2=i;for(i=i+1;i<m;i++)//就是这里,这个万恶的m{b2[i-leap2-1]=str2[i]-'0';}break;}a2[i]=str2[i]-'0';leap2++;}for(i=0;i<leap1;i++){x[i]=a1[leap1-1-i];}for(i=0;i<leap2;i++){y[i]=a2[leap2-1-i];}max=leap1>leap2?leap1:leap2;for(i=0;i<max;i++){a[i]=x[i]+y[i];}max=(n-leap1-1)>(m-leap2-1)?(n-leap1-1):(m-leap2-1);for(i=0;i<max;i++){b[i]=b1[i]+b2[i];}leap=0;cas=0;for(i=max-1;i>=0;i--){b[i]=b[i]+leap;leap=b[i]/10;b[i]=b[i]%10;cas+=b[i];if(b[i]==0&&cas==0)b[i]=-1;}max=leap1>leap2?leap1:leap2;for(i=0;i<max;i++){a[i]=a[i]+leap;leap=a[i]/10;a[i]=a[i]%10;}if(leap)a[i]=leap,max++;for(i=max-1;i>=0;i--)printf("%d",a[i]);if(cas)printf(".");max=(n-leap1-1)>(m-leap2-1)?(n-leap1-1):(m-leap2-1);for(i=0;i<max;i++){if(b[i]>=0)printf("%d",b[i]);}printf("\n");}return 0;
}