洛谷 U2878 小R的分数比赛(fraction)
题目提供者 2015c07
标签 数论(数学相关) 高精度
难度 尚无评定
通过/提交 0/29
提交该题 记录
题目背景
P5难度系数:★★★☆☆
小R再次挑战你。 这次的挑战又会是什么呢?
题目描述
裁判组给出的题目:
任意给出一个分数(分子必定是1,分母可能非常大)(假设分数是x分之一,则输入用1/x表示。),求1/x=1/(x+1)+()。
输入输出格式
输入格式:
一行,为初始分数。
输出格式:
一行,为括号答案。
输入输出样例
输入样例#1:
1/3
输出样例#1:
1/12(⅓(0.33333……)=¼(0.25)+1/12(0.08333……))
说明
样例括号内为样例解释,不必输出(只需输出1/12)。
初始分数的分母≤2^32-1
/*
高精度乘法+最小公倍数(乱搞)
*/
#include<iostream>
#include<cstdio>
#define MAXN 1001
using namespace std;
long long a[MAXN],b[MAXN],m[MAXN],n[MAXN],c[MAXN],l1,l2,x,xx;
void init()
{
while(x)
{
a[++l1]=x%10;
x/=10;
}
}
void init2()
{
while(xx)
{
b[++l2]=xx%10;
xx/=10;
}
}
void solve()
{
for(int i=1;i<=l1;i++)
{
x=0;
for(int j=1;j<=l2;j++)
{
c[i+j-1]=x+c[i+j-1]+a[i]*b[j];
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+l2]=x;
}
int l3=l1+l2;
while(c[l3]==0&&l3>1)
{
l3--;
}
for(int i=l3;i>=1;i--)
{
cout<<c[i];
}
}
int main()
{
char a,b;
cin>>a>>b>>x;
xx=x+1;
cout<<"1"<<"/";
init();
init2();
solve();
return 0;
}