gpt4 book ai didi

c - 如何从输入文件中提取信息并将它们放入 C 数组中?

转载 作者:行者123 更新时间:2023-11-30 21:08:07 25 4
gpt4 key购买 nike

我有一个 input.txt 文件:

  • 第一行:m以及以下m行我有 2 个数字对 an

我必须计算 a^n,结果最多可以有 10^8 位。我使用数组编写了程序并将值赋予 an 。它返回了正确答案。但我要做的就是从文件中读取信息,计算 a^n 并将数字写入 output.txt 文件中。

示例:

在 input.txt 中,我在第一行

2
2 10
1 100000

输出.txt

1024
1

正如我所说,该程序适用于我在主程序中编写的任何数字。现在我需要帮助从 input.txt 中提取数字,将它们放入数组中,然后在计算它们后将它们返回到 output.txt 中。

<小时/>

从 codepad.org 复制的非编译代码

#include <stdio.h>
#include <stdlib.h>

const int MAX_NR_DIGITS = 10000;

void longNumClone(char *from, char *to)
{
int i;
for (i = 0; i < MAX_NR_DIGITS; i++)
to[i] = from[i];
}

void longNumPrint(char *num, int sizeNum) {
int i;
for (i = sizeNum-1; i >= 0; i--) {
printf("%i", num[i]);
}
}

int longNumDiv2(char *rez, char *num, int sizeNum) {
int i;
num[sizeNum] = 0;
rez[sizeNum] = 0;

for (i = sizeNum - 1; i >= 0; i--) {
rez[i] = ((num[i+1] - rez[i+1]*2) * 10 + num[i]) / 2;
}

if (rez[sizeNum - 1] == 0) {
return sizeNum - 1;
}
return sizeNum;
}

int multiply(char *rez, char *a, int sizeA, char *b, int sizeB) {
int sizeRez = 0, i;
for (i = 0; i < MAX_NR_DIGITS; i++) {
rez[i] = 0;
}

int temp = 0, j;
for (i = 0; i < sizeB; i++) {
for (j = 0; j < sizeA; j++) {
temp = b[i] * a[j];

int inc = 0;
do {
temp = temp + rez[i + j + inc];
rez[i + j + inc] = temp % 10;
if (i + j + inc + 1 > sizeRez) {
sizeRez = i + j + inc + 1;
}
temp = temp / 10;
inc++;
}while (temp != 0);
}
}

return sizeRez;
}

int superpow(char *rez, char *base, int sizeBase, char *exp, int sizeExp) {
int i;
char temp[MAX_NR_DIGITS];
char temp1[MAX_NR_DIGITS];
char temp2[MAX_NR_DIGITS];

for (i = 0; i < MAX_NR_DIGITS; i++) {
rez[i] = 0;
}

int sizeRez = 1;
rez[0] = 1;

while (sizeExp > 0) {
if (exp[0] & 1) {
longNumClone(rez, temp);
sizeRez = multiply(rez, temp, sizeRez, base, sizeBase);
}

longNumClone(exp, temp);
sizeExp = longNumDiv2(exp, temp, sizeExp);

longNumClone(base, temp1);
longNumClone(base, temp2);
sizeBase = multiply(base, temp1, sizeBase, temp2, sizeBase);

}

return sizeRez;
}

int main() {

// 4437053125^625
char a[MAX_NR_DIGITS] = {5, 2, 1, 3, 5, 0, 7, 3, 4, 4};
int sizeA = 10;
char n[MAX_NR_DIGITS] = {5, 2, 6};
int sizeN = 3;

char rez[MAX_NR_DIGITS];
int sizeRez = 0;


sizeRez = superpow(rez, a, sizeA, n, sizeN);
longNumPrint(rez, sizeRez);

return 0;
}

main() 中的数组被视为可变长度数组 (VLA),因为 MAX_NR_DIGITS不被视为整数常量表达式,并且无法初始化 VLA。在 C++ 中可以,但在 C 中不行。

最佳答案

查看fscanf用于从文件中读取某种格式,以及 fprintf用于将某种格式写入文件。

给出一些初始化的FILE *read_fileFILE *write_file的示例可能是

int count, int a, n;
fscanf(read_file, "%d ", &count);

for (i = 0; i < count; i++) {
fscanf(read_file, "%d %d ", &a, &n);
...
/* calculate the output result */
...
fprintf(write_file, "%d\n", result);
}

关于c - 如何从输入文件中提取信息并将它们放入 C 数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40263121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com