以下是一个简单的C语言程序,用于实现大整数加减乘除运算:\n\nc\n#include <stdio.h>\n#include <string.h>\n\n#define MAX_DIGITS 50\n\nvoid reverse_string(char *str) {\n int i, j;\n char temp;\n for (i = 0, j = strlen(str) - 1; i < j; i++, j--) {\n temp = str[i];\n str[i] = str[j];\n str[j] = temp;\n }\n}\n\nvoid remove_leading_zeros(char *str) {\n int i;\n while (str[0] == '0' && strlen(str) > 1) {\n for (i = 0; i < strlen(str) - 1; i++) {\n str[i] = str[i + 1];\n }\n str[i] = '\0';\n }\n}\n\nvoid add(char *num1, char *num2, char *result) {\n int carry = 0, sum, i;\n int len1 = strlen(num1);\n int len2 = strlen(num2);\n int max_len = len1 > len2 ? len1 : len2;\n \n for (i = 0; i < max_len; i++) {\n int digit1 = i < len1 ? num1[i] - '0' : 0;\n int digit2 = i < len2 ? num2[i] - '0' : 0;\n \n sum = digit1 + digit2 + carry;\n result[i] = sum % 10 + '0';\n carry = sum / 10;\n }\n \n if (carry > 0) {\n result[i] = carry + '0';\n i++;\n }\n \n result[i] = '\0';\n \n reverse_string(result);\n remove_leading_zeros(result);\n}\n\nvoid subtract(char *num1, char *num2, char *result) {\n int borrow = 0, diff, i;\n int len1 = strlen(num1);\n int len2 = strlen(num2);\n int max_len = len1 > len2 ? len1 : len2;\n \n for (i = 0; i < max_len; i++) {\n int digit1 = i < len1 ? num1[i] - '0' : 0;\n int digit2 = i < len2 ? num2[i] - '0' : 0;\n \n diff = digit1 - digit2 - borrow;\n \n if (diff < 0) {\n diff += 10;\n borrow = 1;\n } else {\n borrow = 0;\n }\n \n result[i] = diff + '0';\n }\n \n result[i] = '\0';\n \n reverse_string(result);\n remove_leading_zeros(result);\n}\n\nvoid multiply(char *num1, char *num2, char *result) {\n int len1 = strlen(num1);\n int len2 = strlen(num2);\n int i, j, product, carry = 0;\n \n for (i = len1 - 1; i >= 0; i--) {\n carry = 0;\n for (j = len2 - 1; j >= 0; j--) {\n product = (num1[i] - '0') * (num2[j] - '0') + carry + (result[i + j + 1] - '0');\n result[i + j + 1] = product % 10 + '0';\n carry = product / 10;\n }\n result[i] += carry;\n }\n \n result[len1 + len2] = '\0';\n \n remove_leading_zeros(result);\n}\n\nint compare(char *num1, char *num2) {\n int len1 = strlen(num1);\n int len2 = strlen(num2);\n \n if (len1 > len2) {\n return 1;\n } else if (len1 < len2) {\n return -1;\n } else {\n return strcmp(num1, num2);\n }\n}\n\nvoid divide(char *num1, char *num2, char *quotient, char *remainder) {\n char temp[MAX_DIGITS];\n char zero[] = "0";\n int cmp;\n \n strcpy(remainder, num1);\n strcpy(quotient, zero);\n \n while ((cmp = compare(remainder, num2)) >= 0) {\n subtract(remainder, num2, temp);\n strcpy(remainder, temp);\n add(quotient, "1", temp);\n strcpy(quotient, temp);\n }\n \n remove_leading_zeros(quotient);\n remove_leading_zeros(remainder);\n}\n\nint main() {\n char num1[MAX_DIGITS];\n char num2[MAX_DIGITS];\n char result[MAX_DIGITS];\n \n printf("Enter the first number: ");\n scanf("%s", num1);\n \n printf("Enter the second number: ");\n scanf("%s", num2);\n \n add(num1, num2, result);\n printf("Sum: %s\n", result);\n \n subtract(num1, num2, result);\n printf("Difference: %s\n", result);\n \n multiply(num1, num2, result);\n printf("Product: %s\n", result);\n \n divide(num1, num2, result, num1);\n printf("Quotient: %s\n", result);\n printf("Remainder: %s\n", num1);\n \n return 0;\n}\n\n\n这个程序使用了数组来表示大整数,并通过调用不同的函数实现了加减乘除运算。函数reverse_string用于反转字符串,remove_leading_zeros用于移除字符串前面的零。函数add实现了大整数加法,函数subtract实现了大整数减法,函数multiply实现了大整数乘法,函数divide实现了大整数除法。函数compare用于比较两个大整数的大小。\n\n在main函数中,用户输入两个大整数,然后分别调用addsubtractmultiplydivide函数进行加减乘除运算,并输出结果。\n\n请注意,这个程序只是一个简单的示例,可能存在一些限制和不足之处,比如没有处理输入错误的情况,以及没有进行越界检查。在实际应用中,可能需要对程序进行改进和增强。

C语言实现大整数加减乘除运算:初学者指南

原文地址: https://www.cveoy.top/t/topic/pxhM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录