Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
1001这个到底怎么错了,请帮我看看,谢谢#include <iostream> #include <vector> #include <string> using namespace std; char szNumber[2048]; inline int max(int a,int b) { return (a>b)?a:b; } inline int min(int a,int b) { return (a<b)?a:b; } void CAC(const char *A,int nExp) { float fData; int i,j; sscanf(A,"%f",&fData); int iData,iSft=0; float fThre=1.0f; while(fData-(int)fData>1e-6f*fThre) { iSft++; fData*=10.0f; fThre*=10.0f; } iData=(int)(fData+0.5f); iSft*=nExp; int iDigit[32]; int iDataLow=iData%10000; int iDataHigh=iData/10000; memset(iDigit,0,sizeof iDigit); iDigit[0]=iDataLow; iDigit[1]=iDataHigh; for( i=2;i<=nExp;++i) { int iDigitTmp[31]; int iRem=0; for( j=0;j<31;++j) { int iTemp=iDigit[j]*iDataHigh+iRem; iRem=iTemp/10000; iDigitTmp[j]=iTemp%10000; } iRem=0; int iTemp=(iDigit[0]+iRem)*iDataLow; iRem=iTemp/10000; iDigit[0]=iTemp%10000; for( j=1;j<32;++j) { int iTemp=iDigit[j]*iDataLow+iRem+iDigitTmp[j-1]; iRem=iTemp/10000; iDigit[j]=iTemp%10000; } } char buff[2048]; memset(buff,'0',sizeof buff); char *sNumber=buff+1600; char sNumber2[2048]; for( i=31;i>=0;--i) { sprintf(sNumber+(31-i)*4,"%04d",iDigit[i]); } int iNonZeroHigh=32*4; for( i=0;i!=32*4;++i) { if(sNumber[i]!='0') break; --iNonZeroHigh; } int iNonZeroLow=0; for( i=32*4-1;i!=-1;--i) { if(sNumber[i]!='0') break; ++iNonZeroLow; } if(iNonZeroHigh==0) strcpy(szNumber,"0"); else { int iLeftShift=max(iNonZeroHigh,iSft); strcpy(sNumber2,sNumber+32*4-iLeftShift); int iRightShift=min(iNonZeroLow,iSft); sNumber2[iLeftShift-iRightShift]=0; if(iNonZeroLow>=iSft) strcpy(szNumber,sNumber2); else { int iPointPos=iLeftShift-iSft; memmove(sNumber2+iPointPos+1,sNumber2+iPointPos,iSft-iRightShift+1); sNumber2[iPointPos]='.'; strcpy(szNumber,sNumber2); } } strcat(szNumber,"\n"); } int main(int argc, char * argv[]) { char s[100]; int n; vector <string> result; while(scanf("%s%d",s,&n)==2) { CAC(s,n); result.push_back(szNumber); } for(int i=0;i<result.size();++i) { cout<<result[i]; } cout.flush(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator