这道题显然要用高精度与低精度的除法,我也是现学现用。
看到网上有很短的巧妙方法,我竟然毫无阅读的欲望。
就是因为编程前期学了太多的奇技淫巧,仅仅为了过题,而没有掌握背后的算法,现在编程能力跟人相差甚远。
踏踏实实写点东西才是关键!
#include<bits/stdc++.h>
using namespace std;
int r=0;
struct bign{
int d[10005];
int len;
bign(){
memset(d, 0, sizeof(d));
len = 0;
}
};
bign divide(bign a, int b){
bign c;
c.len = a.len;
for(int i = a.len-1; i >= 0; i--){
r = r * 10 + a.d[i];
c.d[i] = r / b;
r = r % b;
}
while(c.len-1>=1 && c.d[c.len-1] == 0){
c.len--;
}
return c;
}
int main(){
int x,L=1;
cin>>x;
bign s,u;
while(1){
u.len = L;
for(int i=0;i<L;i++){
u.d[i] = 1;
}
r = 0; //余数每次开始都要置零
s = divide(u, x);
if(r==0){
for(int i=s.len-1;i>=0;i--) cout<<s.d[i];
cout<<" ";
cout<<u.len<<endl;
return 0;
}else L++;
}
return 0;
}