c语言实现 用高精度方法,求 s=1+2+3+……+n 的精确值(n 以一般整数输入)。
时间: 2023-10-24 09:16:41 浏览: 179
C语言实现高精度加法.c
以下是使用高精度方法计算 s 的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DIGITS 1000
void add(char* a, char* b, char* c) {
int carry = 0, sum;
int len_a = strlen(a), len_b = strlen(b);
int i = len_a - 1, j = len_b - 1, k = 0;
while (i >= 0 || j >= 0 || carry) {
int x = (i >= 0 ? a[i--] - '0' : 0);
int y = (j >= 0 ? b[j--] - '0' : 0);
sum = x + y + carry;
c[k++] = sum % 10 + '0';
carry = sum / 10;
}
c[k] = '\0';
int len_c = strlen(c);
for (int i = 0; i < len_c / 2; ++i) {
char t = c[i];
c[i] = c[len_c - 1 - i];
c[len_c - 1 - i] = t;
}
}
void multiply(char* a, int b, char* c) {
int len_a = strlen(a);
int i = len_a - 1, j = 0;
int carry = 0;
while (i >= 0 || carry) {
int x = (i >= 0 ? a[i--] - '0' : 0);
int prod = x * b + carry;
c[j++] = prod % 10 + '0';
carry = prod / 10;
}
c[j] = '\0';
int len_c = strlen(c);
for (int i = 0; i < len_c / 2; ++i) {
char t = c[i];
c[i] = c[len_c - 1 - i];
c[len_c - 1 - i] = t;
}
}
void sum(char* s, int n, char* result) {
char temp[MAX_DIGITS];
strcpy(result, "0");
for (int i = 1; i <= n; ++i) {
sprintf(temp, "%d", i);
multiply(temp, i, temp);
add(result, temp, result);
}
}
int main() {
int n;
char s[MAX_DIGITS], result[MAX_DIGITS];
scanf("%d", &n);
sum(s, n, result);
printf("%s\n", result);
return 0;
}
```
首先定义了 `add` 函数和 `multiply` 函数,分别用于高精度加法和高精度乘法。然后定义了 `sum` 函数,用于计算 s,其中使用了前面定义的 `multiply` 函数和 `add` 函数。最后在 `main` 函数中读入 n,调用 `sum` 函数计算 s,并输出结果。
需要注意的是,这里使用了字符串来表示高精度数,因此需要注意字符串的初始化和字符串之间的转换。
阅读全文