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),
很急啊啊,迅速回答加分。

个人觉得不是很难,怎么没人回答呢。

#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;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-05
#include<stdio.h>
#include<stdlib.h>
#define N 100
void add(double *a,double *b)
{ int i;
for(i=0;i<N/2;i++)
{
b[i]=a[i]+b[i];

}

}
void minus(double *a,double *b)
{ int i;
for(i=0;i<N/2;i++)
{
b[i]=a[i]-b[i];

}

}
int main()
{ int i;
double s=0,aa[50],bb[50];
for(i=0;i<N/2;i++)
{
aa[i]=1.0/(1+2*i);
bb[i]=1.0/(2+2*i);
}

minus(aa,bb);
for(i=0;i<N/2;i++)
{
s+=bb[i];
}
printf("%0.16f\n",s);
return 0;

}追问

大神,输出结果只有十几位啊。

追答

大哥,没注意啊,要100位啊,那我帮不了你,我的那个程序最多就32位

第2个回答  2013-06-05
=
47979622564155786918478609039662898122617÷69720375229712477164533808935312303556800
=
0.68817217931019520324464588269348406593837030274099782351763152441038\
7750974683138789905105038779123452448249534238096240103189862306247916\
2452329360054204631996514361767247479068708488426202638043149837013715\
7631399807701579373392900783617548474704838000649741226122787920457091\
8637811733270847900451886015468972176229636060155679326432490764293558\
5594451323614010010743339458026596487143707333634678581964255830901704\
0922944038835706635736344285308049666386363253323426104969485118155093\
9009189991594724507257456718761646541339563953921826339278076074368777\
7105316996404835530403862256453727099538233023628563242120830215503884\
6994385730278370672230433425774339578361620519565155591269078519608913\
6642030079373129651679692951702941580280734358756576811591935221960088\
5331458509618062063714136183389008314180550786304192511310289197392893\
6777406269793742477287304528170944623519564898843554599356737645086134\
1028217079580681377191602390619491958507159602317083915683756981803161\
3113442099068644943332
第3个回答  2013-06-05
void add(int *b,int *a), void minus(int *b,int *a),

入参可以解释一下么?怎么是int*追问

void add(int *b,int *a)
void minus(int *b,int *a)
含义是将数组a表示的小数部分与数组b表示的小数部分相加或相减后存于数组b.

追答

哪个学校的考试题,这么多人在问

c语言高精度计算 s=1-1\/2+1\/3-1\/4+...+1\/99-1\/100精确到小数点后100...
两整数相除精确到小数点后100位 include<stdio.h> define N 100 main(){int x,y,yu,i,zen;int num[N+3];printf("请输入被除数!\\n");scanf("%d",&x);printf("请输入除数!\\n");scanf("%d",&y);zen=x\/y;num[1]='.';for(i=2;i<=N+2;i++){yu=x%y;num[i]=(yu*10)...

c语言高精度计算 s=1-1\/2+1\/3-1\/4+...+1\/99-1\/100,精确到小数点后100...
或减法运算可能产生的借位 *\/int CF = 0;\/* divider: 被除数 div: 除数 integer: 计算结果的整数部分 result: 计算结果的小数部分*\/void Div(int divider, int div, int *integer, int

c语言求s=1-1\/2+1\/3-1\/4+1\/5-1\/6+…+1\/99-1\/100的值(按四舍五入方式精 ...
c语言求s=1-1\/2+1\/3-1\/4+1\/5-1\/6+…+1\/99-1\/100的值(按四舍五入方式精确到小数点后4位)#0.6882  我来答 1个回答 #热议# 【答题得新春福袋】你的花式拜年祝福有哪些? ylcqucc 2014-12-06 · TA获得超过1400个赞 知道小有建树答主 回答量:852 采纳率:0% 帮助的人:688万 我...

C语言计算1-1\/2+1\/3-1\/4+...+1\/99-1\/100
{ int i;float sum=0.0,temp=0.0;for (i = 1; i <= 100; i++){ temp = pow(-1, i + 1);sum = sum + temp * 1 \/ i;} printf("sum is %f\\n", sum);system("pause");return 0;} 运行效果:

怎么用C语言编程求:1-1\/2+1\/3-1\/4+...+1\/99-1\/100
include <stdio.h>int main(int argc,char *argv[]){ int i; double sum; for(sum=0.0,i=1;i<101;i++) sum += i&1 ? 1.0\/i : -1.0\/i; printf("The result is %g\\n",sum); return 0;}

使用C语言计算1-1\/2+1\/3-1\/4+1\/5...+1\/99-1\/100
回答:把 printf("The sum is %d\\n",sum); 里面的 %d 换成 %f 整数 双精度

写出求S=1-1\/2+1\/3-1\/4+...+1\/99-1\/100的程序
\/\/写出求S=1-1\/2+1\/3-1\/4+...+1\/99-1\/100的程序 include "stdio.h"void main(){ int i,n=100;double sum=0;\/\/存储和的变量,初值为0 int sign=1;\/\/控制正负符号的变量 for(i=1;i<=100;i++){ sum=sum+(1.0\/i)*sign;sign=sign*(-1);} printf("S=%lf\\n",sum);...

用C语言计算1-1\/2+1\/3-1\/4+1\/5...+1\/99-1\/100
c语言中在操作除法是如果两个操作数都为整数,则结果为整数,比如1\/2=0 你需要把sum改成浮点型。float sum;sum=sum+(1.0\/i)-(1.0\/(i+1));

C语言程序 1-1\/2+1\/3-1\/4+...+1\/99-1\/100
1-1\/2+1\/3-1\/4+...+1\/99-1\/100 那么不需要输入n,其他不变就是了 如果是计算 1-1\/2+1\/3-1\/4+...+1\/n 才需要输入n 代码如下(不需要math.h头文件):include <stdio.h>void main(){ double sum; int i,n,m; \/\/加个变量i printf("请输入n:"); scanf("...

c语言编程求1-1\/2+1\/3-1\/4+1\/5-1\/6+…….+1\/99-1\/100的值。 可不可以...
{ if(i%2==0) \/\/分母是偶数用减 sum=sum-1.0\/i; \/*这里用 1.0\/i 不能用1\/i,1\/i得到的整型,比如 1\/5会等于0,而这里想要的是等于0.2,所以不对*\/ else \/\/分母是奇数用加 sum=sum+1.0\/i; } printf("结果等于%lf\\n",sum)} ...

相似回答