| ||||||||||
| 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 | |||||||||
RUNTIME ERROR!常见原因有哪些啊?#include <iostream>
#include <string>
#include <vector>
using namespace std;
#include <math.h>
void convert(string &s,unsigned int n,vector<unsigned int> &v,unsigned int &sh);
void expo(const vector<unsigned int> &v,unsigned int e,vector<unsigned int> &r);
void display(vector<unsigned int> &r,unsigned int sh,vector<string> &str);
void multi(vector<unsigned int> &a,vector<unsigned int> &b,vector<unsigned int> &r);
string inttostr(unsigned int u);
const unsigned long base=10000;
unsigned int main()
{
const unsigned int num=6;
string str(num,'0');
unsigned int n;
unsigned int shift;
vector<unsigned int> ivalue;
vector<unsigned int> result;
vector<string> strs;
while(cin>>str>>n)
{
convert(str,n,ivalue,shift);
expo(ivalue,n,result);
display(result,shift,strs);
cout<<*(strs.end()-1)<<endl;
result.clear();
ivalue.clear();
}
//for(unsigned int i=0;i<strs.size();i++)
//{
//cout<<strs[i]<<endl;
//}
return 0;
}
void convert(string &s,unsigned int n,vector<unsigned int> &v,unsigned int &sh)
{
unsigned long temp_l;
unsigned int i=s.length()-1;
while(s[i]=='0')
{
i--;
}
s.erase(i+1);
if(s[i]=='.')
{
s.erase(i);
temp_l=atol(s.c_str());
sh=0;
}
else
{
sh=(i-s.find('.'))*n;
string temp_str;
for(unsigned int j=0;j<=i;j++)
{
if(s[j]!='.')
temp_str+=s[j];
}
temp_l=atol(temp_str.c_str());
}
v.insert(v.end(),unsigned int(temp_l%base));
unsigned int t;
if((t=unsigned int(temp_l/base))!=0)
{
v.insert(v.end(),t);
}
}
void expo(const vector<unsigned int> &v,unsigned int e,vector<unsigned int> & r)
{
unsigned int num=unsigned int(floor(log(float(e))/log(2.0f)));
vector<unsigned int> * pv=new vector<unsigned int>[num+1];
unsigned int i;
for(i=0;i<v.size();i++)
{
pv[0].insert(pv[0].end(),v[i]);
}
for(i=1;i<=num;i++)
{
multi(pv[i-1],pv[i-1],pv[i]);
}
r.clear();
for(i=0;i<pv[num].size();i++)
{
r.insert(r.end(),pv[num][i]);
}
e-=(1<<num);
unsigned int m;
while(e>0)
{
m=unsigned int (floor(log(float(e))/log(2.0)));
multi(r,pv[m],r);
e-=(1<<m);
}
}
void display(vector<unsigned int> &r,unsigned int sh,vector<string> &str)
{
string s;
for(int i=r.size()-1;i>=0;i--)
{
s+=inttostr(r[i]);
}
if(sh<=s.length())
{
s.insert(s.length()-sh,1,'.');
}
else
{
for(unsigned int i=0;i<sh-s.length();i++)
{
s.insert(0,"0");
}
s.insert(0,".");
}
i=0;
while(s[i]=='0') s.erase(s.begin());
str.insert(str.end(),s);
}
void multi(vector<unsigned int> & a,vector<unsigned int> &b,vector<unsigned int> &r)
{
int i,j;
int m=a.size();
int n=b.size();
vector<int> a1,b1;
for(i=0;i<m;i++)
{
a1.insert(a1.end(),a[i]);
}
for(i=0;i<n;i++)
{
b1.insert(b1.end(),b[i]);
}
r.clear();
r.insert(r.end(),m+n+1,0);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
unsigned long t=a1[i]*b1[j];
unsigned int m1=t%base;
unsigned int n1=t/base;
unsigned long p=m1+r[i+j];
r[i+j]=p%base;
p/=base;
unsigned long q=n1+p+r[i+j+1];
int k=i+j+1;
unsigned int t1;
while((t1=q/base)!=0)
{
r[k]=q%base;
q=t1+r[k+1];
k++;
}
r[k]=q;
}
}
if(r[i+j+1]==0) r.erase(r.end());
}
string inttostr(unsigned int u)
{
string s(4,'0');
for(int i=3;i>=0;i--)
{
s[i]=char(u%10+0x30);
u/=10;
}
return s;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator