题目:百事世界杯之旅
思路:
即求
n∗(1+12+13+...+1n)
n
∗
(
1
+
1
2
+
1
3
+
.
.
.
+
1
n
)
,注意向左对齐。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
ll GCD(ll x,ll y) {
if(y==0) return x;
return GCD(y,x%y);
}
ll find(ll x) {
ll j=1;
for(ll i=1; ; i++) {
j*=10;
if(x/j==0) return i;
}
}
int main() {
scanf("%lld",&n);
ll x=1,y=1;
for(ll i=2; i<=n; i++) {
x=x*i+y;
y=y*i;
ll gcd=GCD(x,y);
x/=gcd,y/=gcd;
}
x*=n;
ll gcd=GCD(x,y);
x/=gcd,y/=gcd;
if(x%y==0) {
printf("%lld",x/y);
return 0;
}
ll zheng=x/y;
x-=zheng*y;
if(zheng==0) {
ll xx=find(x),yy=find(y);
for(ll i=1; i<=yy-xx; i++) printf(" ");
printf("%lld\n",x);
for(ll i=1; i<=yy; i++) printf("-");
printf("\n%lld",y);
return 0;
}
ll z=find(zheng);
for(ll i=1; i<=z; i++) printf(" ");
ll xx=find(x),yy=find(y);
printf("%lld\n%lld",x,zheng);
for(ll i=1; i<=yy; i++) printf("-");
printf("\n");
for(ll i=1; i<=z; i++) printf(" ");
printf("%lld",y);
return 0;
}