C语言大数值运算该怎么办,请进

2025-03-29 02:58:20
推荐回答(3个)
回答1:

把输入作为一个字符串进行处理
// 传入一位被加数、一位加数、进位标识;输出进位标识,一位和
void addInteger(const char a, const char b, int& flag, char& sum)
{
int num1 = a - '0';
int num2 = b - '0';
if ((num1 < 0) || (num1 > 9) || (num2 < 0) || (num2 > 9))
{
printf("输入有误,该位置0。\n");
sum = '0';
flag = 0;
return;
}
int s = num1 + num2 + flag;
sum = '0' + s % 10;
flag = s/10;
return;
}

int main()
{
int n = 0;
char a[201]; // 最多200位,预留一个结尾符
char b[201]; // 同上
char sum[202]; // 最多201位,预留一个结尾符
scanf("%d", &n);
for (; n > 0; n--)
{
scanf("%s %s", &a, &b); // 读取输入
int i = strlen(a);
int j = strlen(b);
int s = ((i > j) ? (i + 1) : (j + 1)); // 获取i,j中最大值,并+1,用来标识和的位数
sum[s] = '\0'; // 将该位置为结尾符
int flag = 0; // 记录借位符
// 编程思想:利用字符数组,从尾往头相加
while (s > 0)
{
char c1 = ((--i < 0) ? '0' : a[i]);
char c2 = ((--j < 0) ? '0' : b[j]);
addInteger(c1, c2, flag, sum[--s]);

}
printf("%s+%s = %s\n", a, b, sum);
}

return 0;
}

未经编译,如有编译问题欢迎追问

回答2:

一定要注意数据溢出的问题

回答3:

请先搜索吧,这题都做了几百次了