个人觉得不是很难,怎么没人回答呢.#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;
}