栈方式处理长整数加法c语言,用C语言实现 多位整数的四则运算,用栈,例如56*(12+20)-102/2...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

gets(szExpression);

// 中缀表达式转后缀表达式,结果保存在expression中

for (int i = 0; i < strlen(szExpression); i++)

{

if (isspace(szExpression[i])) // 空白字符

{

if (bFindBegin)

{

expression[num].type = 1;

expression[num].element.int_element = atoi(pbegin);

num++;

bFindBegin = false;

}

continue;

}

if (isdigit(szExpression[i])) // 数字字符

{

if (!bFindBegin)

{

pbegin = &szExpression[i];

bFindBegin = true;

}

continue;

}

c = szExpression[i];

if (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')') // 操作符字符

{

if (bFindBegin)

{

expression[num].type = 1;

expression[num].element.int_element = atoi(pbegin);

num++;

bFindBegin = false;

}

if (c != ')')

{

if (!isEmpty(pSymboolStack)) // 存在操作符

{

if (c == '(') // 直接入栈

push(pSymboolStack, c);

else {

do

{

char topElement = top(pSymboolStack);

if (compare(topElement, c) >= 0 && topElement != '(') // 优先级不低于c且栈顶不等于'(',则出栈

{

expression[num].type = 2;

expression[num].element.char_element = topElement;

num++;

pop(pSymboolStack);

}

else

break;

} while (!isEmpty(pSymboolStack));

// c入栈

push(pSymboolStack, c);

}

} // 不存在操作符,直接入栈

else

push(pSymboolStack, c);

}

else // c == ')'

{

while( (c =top(pSymboolStack)) != '(')

{

expression[num].type = 2;

expression[num].element.char_element = c;

num++;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个C语言实现的例子。其中,LongInt是自定义的结构体类型,用来表示一个超整数。该结构体类型包含一个char类型数组digits,数组元素用来存储整数各位数字,还包含一个int类型变量length,表示整数的有效位数。 ```c #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_LENGTH 10001 // 数组最大度 typedef struct LongInt { char digits[MAX_LENGTH]; // 存储数字的数组 int length; // 数字的有效位数 } LongInt; // 将字符串转换成LongInt类型 LongInt str2longint(char *str) { LongInt num; int len = strlen(str); for (int i = 0; i < len; i++) { num.digits[len-i-1] = str[i] - '0'; } num.length = len; return num; } // 将LongInt类型转换成字符串 char *longint2str(LongInt num) { char *str = (char*)malloc(sizeof(char)*(num.length+1)); for (int i = 0; i < num.length; i++) { str[i] = num.digits[num.length-i-1] + '0'; } str[num.length] = '\0'; return str; } // 高精度加法 LongInt add(LongInt num1, LongInt num2) { LongInt result = {.length = 0}; int carry = 0; // 进位标志 int len = (num1.length > num2.length) ? num1.length : num2.length; for (int i = 0; i < len; i++) { int sum = num1.digits[i] + num2.digits[i] + carry; carry = sum / 10; result.digits[i] = sum % 10; result.length++; } if (carry > 0) { // 处理最高位的进位 result.digits[result.length++] = carry; } return result; } int main() { char str1[MAX_LENGTH], str2[MAX_LENGTH]; printf("请输入第一个整数:"); scanf("%s", str1); printf("请输入第二个整数:"); scanf("%s", str2); LongInt num1 = str2longint(str1); LongInt num2 = str2longint(str2); LongInt result = add(num1, num2); char *str_result = longint2str(result); printf("结果为:%s\n", str_result); free(str_result); return 0; } ``` 这个程序首先读入两个字符串作为超整数,调用str2longint函数将字符串转换成LongInt类型的数字,然后调用add函数进行加法运算,最后将结果转换成字符串并输出。其中,str2longint函数和longint2str函数用来将字符串和LongInt类型的数字互相转换,add函数用来进行高精度加法运算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值