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 |
纠结了好几天了,不知道哪里错了啊。。。它给的数据一组一组输入是没错的(输入一组后重新编译),但是先输入第二组,再输入第一组,再输入第二组这时就有问题了,数组我也重置了,不知道哪里的变量什么的被占用了。。。 #include<iostream> #include<string> using namespace std; int n=10000,n1,m,m1; int a[10000],b[10000],c[10000]; void mul(int a[],int b[],int c[])//a存放中间结果,b存放底数,c存放最终结果 { int i,j,k; for(i=0;i<n;i++) c[i]=0; //C每次循环均置零 for(i=0;i<n1*m;i++) //外层循环次数 for(j=0;j<n1;j++) c[i+j+1]=a[i]*b[j]+c[i+j+1]; k=n-1; //去除后尾没用的零 while(c[k]==0) k--; for(;k>0;k--) //得到一次相乘的结果 { c[k-1]=c[k-1]+c[k]/10; c[k]=c[k]%10; } for(i=0;i<n;i++) a[i]=c[i]; } int main() { n=10000; int i,j,k; string r; bool flag; int mark,num,x; while(cin>>r>>m) { flag=false; m1=m; mark=0; for(k=0;k<n;k++) a[k]=0; for(i=0,j=0;i<r.size();j++,i++) { if(r[i]!='.') a[j]=r[i]-48; else {mark=i;j--;flag=true;} //mark记录小数点的位置,flag记录是否出现小数点 } if(flag!=true) mark=j; for(k=0;k<n;k++) {b[k]=a[k];c[k]=a[k];} //给b c 赋值 n1=j; num=m*mark; //整数位数 while(m1!=1) //相乘次数 { mul(a,b,c); m1--; } n=10000; //去除首尾没用的零 while(c[n-1]==0&&n!=num) n--; k=0; while(c[k]==0&&k!=num) k++; if(k>=n) {cout<<0;continue;} for(;k<num;k++) cout<<c[k]; if(k<n) cout<<'.'; for(k=num;k<n;k++) cout<<c[k]; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator