| ||||||||||
| 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