从chapte1到chapter2历时1个月,虽然短短30多题,但我已跪了10+题以上...
太惨了,今天奋战chapter2最终战,在预先看了解题思路的情况下还是跪倒了.
最后是看了下这篇解题报告http://blog.csdn.net/supersnow0622/article/details/9765255
仿照着勉强写了一遍,努力啊少年
/* ID:hubiao cave LANG:C++ TASK:fracdec */ #include<iostream> #include<fstream> #include<cstring> #include<string> using namespace std; int main() { // int b[100000]; string str;//存储结果 int used[100000]; int fz,fm; int num=1; int result; int a,b; ifstream fin("fracdec.in"); ofstream fout("fracdec.out"); memset(used,0,sizeof(used)); fin>>fz>>fm; result=fz/fm; while(result>=10)//计算整数部分位数 { result/=10; num++; } if(fz%fm==0)//判断整除,可以则直接退出 { fout<<fz/fm<<".0"<<endl; return 0; } else fout<<fz/fm<<"."; b=fz%fm; fz=b*10; a=fz/fm; str+=a+'0'; while(!used[b]) { used[b]=str.length(); b=fz%fm; fz=b*10; a=fz/fm; str+=a+'0'; } if(used[0])//可以除断 { int totalnum=num+1; for(int i=0;i<=str.length()-3;++i) { totalnum+=i+1; if(totalnum%76==0) fout<<endl; fout<<str[i]; } fout<<endl; } else { int totalnum=num+1; int dd=str.length()-2; int i; for(i=0;i<used[b]-1;++i) { totalnum+=1; if(totalnum%76==0) fout<<endl; fout<<str[i]; } totalnum++; if(totalnum%76==0) fout<<endl; fout<<'('; for(;i<=dd;i++) { if(totalnum%76==0) fout<<endl; fout<<str[i]; totalnum+=1; } if(totalnum%76==0) fout<<endl; fout<<')'<<endl; } return 0; }