当前位置: 代码迷 >> 综合 >> repeat(2)_实数加法
  详细解决方案

repeat(2)_实数加法

热度:38   发布时间:2023-12-06 05:37:14.0

repeat_实数加法

//
#include<bits/stdc++.h>
using namespace std;const int N1=111;
const int N2=222;char str1[N2],str2[N2];
char A[N1],a[N1],B[N1],b[N1],ANS[N1],ans[N1];
int Alen,alen,Blen,blen,ANSlen,anslen; void init()
{memset( str1,0,sizeof( str1 ) );memset( str2,0,sizeof( str2 ) );memset( A,0,sizeof( A ) );memset( a,0,sizeof( a ) );memset( B,0,sizeof( B ) );memset( b,0,sizeof( b ) );memset( ANS,0,sizeof( ANS ) );memset( ans,0,sizeof( ans ) );
}void my_strrev( char str[] )
{char *p1=str;char *p2=str+strlen(str)-1;char temp;while( p1<p2 ){temp=*p1; *p1=*p2; *p2=temp;p1++; p2--;}
}void convert( char str[] )
{for( int i=0;str[i];i++ ) str[i]-='0';
}void process()
{int i,pos;      // pos++pos=0; for( i=0;str1[i]!='.';i++ ) A[pos++]=str1[i]; Alen=strlen(A);pos=0; for( i++;str1[i];i++ )      a[pos++]=str1[i]; alen=strlen(a);pos=0; for( i=0;str2[i]!='.';i++ ) B[pos++]=str2[i]; Blen=strlen(B);pos=0; for( i++;str2[i];i++ )      b[pos++]=str2[i]; blen=strlen(b);ANSlen=Alen>Blen?Alen:Blen;anslen=alen>blen?alen:blen;my_strrev(A); my_strrev(B);convert(A); convert(B);convert(a); convert(b);
}void sum()
{int i,pro=0,flag=1;for( i=anslen-1;i>=0;i-- ){ans[i]=( a[i]+b[i]+pro )%10;pro=( a[i]+b[i]+pro )/10;if( flag ){if( ans[i]==0 ) anslen--;else flag=0;}}for( i=0;i<=ANSlen;i++ ){ANS[i]=( A[i]+B[i]+pro )%10;pro=( A[i]+B[i]+pro )/10;}
}void output()
{int i;for( i=ANSlen; ANS[i]==0 && i ;i-- );for( ;i>=0;i-- ) printf("%d",ANS[i]);printf(".");for( i=0;i<anslen;i++ ) printf("%d",ans[i]);printf("\n");
}int main()
{int i; init();while( ~scanf("%s%s",str1,str2) )       // 数组名{process();sum();output();init();}return 0;
}

//
find:
01 数组名 
02 pos++

  相关解决方案