Problem C: 很简单的一道题

来源:互联网 发布:less than知乎 编辑:程序博客网 时间:2024/05/16 00:40

Problem C: 很简单的一道题

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 88  Solved:18
[Submit][Status][Web Board]

Description

有一个简单的函数数学公式,如下

Input

重复输入多组数据

 输入n(1<=n<=10),输入-1程序终止。

Output

 输出f(n)的结果(保留30位小数)

Sample Input

1

3

6

10

-1

Sample Output

1.000000000000000000000000000000

0.166666666666666666666666666666

0.047619047619047619047619047619

0.018181818181818181818181818181

解题思路:

需要用到循环输出小数点后30位的数据。


代码:

#include <iostream>#include <cmath> using namespace std; int fun(int n){    if (1 == n)        return 1;    else        return n+fun(n-1);} int funt(int n){    if (1 == n || 0 == n)        return 1;    else        return n * funt(n-1);} void div(int a, int b,int arr[],int len){    int result = fabs(a/b);//商的整数部分    int remainder = fabs(a%b);//余数    int i;    for(i=0; i<len;i++)    {        a = remainder * 10;//用余数*10作为新的被除数去运算        arr[i] = fabs(a/b);        remainder = fabs(a%b);//得到新的余数    }//    if(a*b<0) //   {//        cout<<"-";//看商是否为负值 //   }    cout<<result<<".";//输出整数部分和小数点    for(i=0; i<len; i++)//输出小数部分    {        cout<<arr[i];    }    cout << endl;} int main(){    int n;    int array[30] = {0};    while (cin >> n)    {        int sum = 0;        if (n == -1)        {            break;        }        if ((n >= 1) && (n <= 10) && (0 == n % 2))        {            sum = fun(n);        }        else        {            sum = funt(n);        }        div(1, sum, array, 30);    }     return 0;}



原创粉丝点击