c语言高精度计算 s=1-1/2+1/3-1/4+.+1/99-1/100,精确到小数点后100位

问题描述:

c语言高精度计算 s=1-1/2+1/3-1/4+.+1/99-1/100,精确到小数点后100位
必须使用高精度加法函数add和高精度减法函数minus,形式为
void add(int *b,int *a),voidminus(int *b,int *a),
1个回答 分类:综合 2014-12-07

问题解答:

我来补答
个人觉得不是很难,怎么没人回答呢.#include <stdio.h>
/* 表示需要精确的小数点位数 */
#define N 100
/* 记录加法运算可能产生的进位,或减法运算可能产生的借位 */
int CF = 0;
/*
 divider:  被除数
 div:      除数
 integer:  计算结果的整数部分
 result:   计算结果的小数部分
*/
void Div(int divider, int div, int *integer, int *result)
{
    int i = 0;
    *integer = divider / div;
    divider %= div;
    for (i=0; i<N; i++)
    {
        divider *= 10;
        result[i] = divider / div;
        divider %= div;
    }
}
void Add(int *b, int *a)
{
    int i;
    int overflow = 0;
    for (i=N-1; i>=0; i--)
    {
        b[i] += (a[i] + overflow);
        if (b[i] >= 10)
        {
            overflow = 1;
        }
        else
        {
            overflow = 0;
        }
        b[i] %= 10;
    }
    CF = overflow;
}
void Minus(int *b, int *a)
{
    int i;
    int borrow = 0;
    for (i=N-1; i>=0; i--)
    {
        b[i] -= (a[i] + borrow);
        if (b[i] < 0)
        {
            b[i] += 10;
            borrow = 1;
        }
        else
        {
            borrow = 0;
        }
    }
    CF = borrow;
}
int main()
{
    int div;
    int Sum[N] = {0}; // 存储最终结果的小数部分
    int Tmp[N] = {0}; // 存储各表达式的小数部分
    int intOfSum = 0; // 存储最终结果的整数部分
    int intOfTmp = 0; // 存储各表达式的整数部分
    int i;
    int sign = -1; // 记录表达式符号位
    for (div=1; div<=100; div++)
    {
        sign *= (-1);
        Div(1, div, &intOfTmp, Tmp);
        if (sign > 0)
        {
            Add(Sum, Tmp);
            intOfSum += (intOfTmp + CF);
        }
        else
        {
            Minus(Sum, Tmp);
            intOfSum -= (intOfTmp + CF);
        }
    }
    /* 打印输出结果: 整数+小数 */
    printf("result is %d.", intOfSum);
    for (i=0; i<N; i++)
    {
        printf("%d", Sum[i]);
    }
    printf("\n");
    return 0;
}
 
 
展开全文阅读
剩余:2000
下一页:立体几何 24题