洛谷 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;
}
posted @ 2016-05-28 20:54  nancheng58  阅读(125)  评论(0编辑  收藏  举报