洛谷 U2878 小R的分数比赛(fraction)

来源:互联网 发布:歌手王芳 知乎 编辑:程序博客网 时间:2024/05/04 23:22

题目提供者 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 1001using 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;}
0 0
原创粉丝点击