acm_pku 1001代码纠正
pku上1001题,怎么就说结果错误呢?请高手指点。!。不管结果如何先谢谢了。原题:http://acm.pku.edu.cn/JudgeOnline/problem?i...
pku上1001题,怎么就说结果错误呢?请高手指点。!。不管结果如何先谢谢了。
原题:http://acm.pku.edu.cn/JudgeOnline/problem?id=1001
另外我用的vs2005和dev c++都能编译通过,在pku上它的C++(vc6)和GCC都编译错误,只有G++能编译通过。是不是pku的编译器比较老啊。
#include<iostream>
#include<cstring>
using namespace std;
void separate_gi(string dr1,int* p,int* l,int& p_tra,int& l_tra)
{
int spyc=0;
while(dr1[spyc]!='.'&&spyc<dr1.size())
{
p[p_tra++]=dr1[spyc]-48;
spyc+=1;
}
//p_tra-=1;//!!
if(dr1[spyc]='.')
{
spyc+=1;
while(spyc<dr1.size())
{
l[l_tra++]=dr1[spyc]-48;
spyc+=1;
}
//l_tra-=1;
}
return;
}
main(){
string dr1;
int dr2;
cin>>dr1>>dr2;
if(dr2==0)
{cout<<1<<endl;system("pause");exit(1);}
if(dr1.size()>6)
{cout<<"to long"<<endl;exit(1);}
int dr1p[5],dr1l[5];
int lengthp=0,lengthl=0;
dr1p[0]=dr1l[0]=0;
separate_gi(dr1,dr1p,dr1l,lengthp,lengthl);
long dr1int=0;
int dr2int=0;
int store_A[127];
for(int tt=0;tt<128;tt+=1)
{store_A[tt]=0;}
for(int tt=0;tt<lengthp;tt+=1)
{dr1int=dr1int*10+dr1p[tt];store_A[lengthp+lengthl-1-tt]=dr1p[tt];}
for(int tt=0;tt<lengthl;tt+=1)
{dr2int=dr2int*10+dr1l[tt];store_A[lengthl-1-tt]=dr1l[tt];}
int ct=1;
for(int tt=1;tt<=lengthl;tt+=1)
ct*=10;
dr1int=dr1int*ct+dr2int;
ct=1;//幂计数
long carry=0;
int curln=lengthp+lengthl;
int pointloc=lengthl;
while(ct<dr2)
{
for(int tt=0;tt<curln;tt+=1)
{
carry+=store_A[tt]*dr1int;
store_A[tt]=carry%10;
carry/=10;
}
while(carry)
{
store_A[curln]=carry%10;
carry/=10;
curln+=1;
}
ct+=1;
pointloc+=lengthl;
}
cout<<endl;
for(int tt=curln-1;tt>=pointloc;tt-=1)
cout<<store_A[tt];
cout<<".";
for(int tt=pointloc-1;tt>=0;tt-=1)
cout<<store_A[tt];
system("pause");
}
那为什么G++可以呢?GCC怎么就不行呢?他不是说C++用的vc6的编译器么?
还有我刚涉及oj,以前看过些简单的算法设计教材,给我推荐点资料和心得吧。谢了!! 展开
原题:http://acm.pku.edu.cn/JudgeOnline/problem?id=1001
另外我用的vs2005和dev c++都能编译通过,在pku上它的C++(vc6)和GCC都编译错误,只有G++能编译通过。是不是pku的编译器比较老啊。
#include<iostream>
#include<cstring>
using namespace std;
void separate_gi(string dr1,int* p,int* l,int& p_tra,int& l_tra)
{
int spyc=0;
while(dr1[spyc]!='.'&&spyc<dr1.size())
{
p[p_tra++]=dr1[spyc]-48;
spyc+=1;
}
//p_tra-=1;//!!
if(dr1[spyc]='.')
{
spyc+=1;
while(spyc<dr1.size())
{
l[l_tra++]=dr1[spyc]-48;
spyc+=1;
}
//l_tra-=1;
}
return;
}
main(){
string dr1;
int dr2;
cin>>dr1>>dr2;
if(dr2==0)
{cout<<1<<endl;system("pause");exit(1);}
if(dr1.size()>6)
{cout<<"to long"<<endl;exit(1);}
int dr1p[5],dr1l[5];
int lengthp=0,lengthl=0;
dr1p[0]=dr1l[0]=0;
separate_gi(dr1,dr1p,dr1l,lengthp,lengthl);
long dr1int=0;
int dr2int=0;
int store_A[127];
for(int tt=0;tt<128;tt+=1)
{store_A[tt]=0;}
for(int tt=0;tt<lengthp;tt+=1)
{dr1int=dr1int*10+dr1p[tt];store_A[lengthp+lengthl-1-tt]=dr1p[tt];}
for(int tt=0;tt<lengthl;tt+=1)
{dr2int=dr2int*10+dr1l[tt];store_A[lengthl-1-tt]=dr1l[tt];}
int ct=1;
for(int tt=1;tt<=lengthl;tt+=1)
ct*=10;
dr1int=dr1int*ct+dr2int;
ct=1;//幂计数
long carry=0;
int curln=lengthp+lengthl;
int pointloc=lengthl;
while(ct<dr2)
{
for(int tt=0;tt<curln;tt+=1)
{
carry+=store_A[tt]*dr1int;
store_A[tt]=carry%10;
carry/=10;
}
while(carry)
{
store_A[curln]=carry%10;
carry/=10;
curln+=1;
}
ct+=1;
pointloc+=lengthl;
}
cout<<endl;
for(int tt=curln-1;tt>=pointloc;tt-=1)
cout<<store_A[tt];
cout<<".";
for(int tt=pointloc-1;tt>=0;tt-=1)
cout<<store_A[tt];
system("pause");
}
那为什么G++可以呢?GCC怎么就不行呢?他不是说C++用的vc6的编译器么?
还有我刚涉及oj,以前看过些简单的算法设计教材,给我推荐点资料和心得吧。谢了!! 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询