问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言课程设计大数乘法和除法

发布网友 发布时间:2022-05-01 22:58

我来回答

1个回答

热心网友 时间:2022-06-24 16:03

#include <stdio.h> #include <string.h> #define MAXCHAR 20000 void Add (char *ch1 , char *ch2 , char *ch3) {// ch3 = ch1 + ch2; int len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , i , tmp , num1[MAXCHAR] , num2[MAXCHAR] , num3[MAXCHAR]; memset (num1 , 0 , sizeof(num1)); memset (num2 , 0 , sizeof(num2)); memset (num3 , 0 , sizeof(num3)); for (i=len1-1;i>=0;i--) num1[len1-1-i] = ch1[i] - 48; for (i=len2-1;i>=0;i--) num2[len2-1-i] = ch2[i] - 48; i = 0 , tmp = 0 , len3 = len1 > len2 ? len1 : len2; while (i < len3) { num3[i] = num1[i] + num2[i] + tmp; tmp = 0; if (num3[i] >= 10) { tmp = num3[i]/10; num3[i] %= 10; } i ++; } if (tmp != 0) { num3[i] = tmp; i ++; } len3 = i; for (i=len3-1;i>=0;i--) ch3[len3-1-i] = num3[i] + 48; ch3[len3] = '\0'; return ; } void Minus (char *ch1 , char *ch2 , char *ch3) { // 保证 ch1 > ch2 : ch3 = ch1 - ch2 int i , tmp , len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , num1[MAXCHAR] , num2[MAXCHAR] , num3[MAXCHAR]; memset (num1 , 0 , sizeof(num1)); memset (num2 , 0 , sizeof(num2)); memset (num3 , 0 , sizeof(num3)); for (i=0;i<len1;i++) num1[len1-1-i] = ch1[i] - 48; for (i=0;i<len2;i++) num2[len2-1-i] = ch2[i] - 48; i = 0 , tmp = 0 , len3 = len1 > len2 ? len1 : len2; while (i < len3) { num3[i] = num1[i] - num2[i] - tmp; if (num3[i] < 0) { num3[i] += 10 , tmp = 1; } else tmp = 0; i ++; } while (len3 > 1 && num3[len3-1] == 0) len3 --; for (i=0;i<len3;i++) ch3[i] = num3[len3-1-i] + 48; ch3[len3] = '\0'; return ; } void MUL (char *ch1 , char *ch2 , char *ch3) {// ch3 = ch1*ch2; int i , j , len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , tmp , num1[MAXCHAR] , num2[MAXCHAR] , num3[MAXCHAR]; memset (num1 , 0 , sizeof(num1)); memset (num2 , 0 , sizeof(num2)); memset (num3 , 0 , sizeof(num3)); for (i=len1-1;i>=0;i--) num1[len1-1-i] = ch1[i] - 48; for (i=len2-1;i>=0;i--) num2[len2-1-i] = ch2[i] - 48; for (i=0;i<len1;i++) { tmp = 0; for (j=0;j<len2;j++) { num3[i+j] += num1[i]*num2[j] + tmp; tmp = 0; if (num3[i+j] >= 10) { tmp = num3[i+j]/10; num3[i+j] %= 10; } } while (tmp != 0) { num3[i+j] += tmp; tmp = num3[i+j]/10; j ++; } } len3 = len1+len2; while (len3 > 1 && num3[len3-1] == 0) len3 --; for (i=0;i<len3;i++) ch3[len3-1-i] = num3[i] + 48; ch3[len3] = '\0'; return ; } int cmp (char *ch1 , char *ch2) {// ch1 > ch2 return 1; ch1 < ch2 return -1; ch1 == ch2 return 0; int i , len1 = strlen (ch1) , len2 = strlen (ch2); if (len1 > len2) return 1; if (len2 > len1) return -1; for (i=0;i<len1;i++) { if (ch1[i] > ch2[i]) return 1; if (ch1[i] < ch2[i]) return -1; } return 0; } void Div (char *ch1 , char *ch2 , char *ch3) {//保证ch1>ch2 && ch2 != 0 : ch3 = ch1/ch2 , ch1 = ch1%ch2 , 需要支持函数:cmp () , Minus (); int i , len1 , len2 , tmp; char ch4[MAXCHAR] , ch5[MAXCHAR]; ch3[0] = '0' , ch3[1] = '\0'; while (cmp (ch1 , ch2) >= 0) { len1 = strlen (ch1) , len2 = strlen (ch2); tmp = len1-len2-1 > 0 ? len1-len2-1 : 0; ch4[0] = '1'; memcpy (ch5 , ch2 , (len2+1)*sizeof(char)); for (i=0;i<tmp;i++) { ch4[1+i] = '0' , ch5[len2+i] = '0'; } ch4[1+i] = '\0'; ch5[len2+i] = '\0'; Add (ch3 , ch4 , ch3); // ch3 += ch4; Minus (ch1 , ch5 , ch1); // ch1 -= ch5; } return ;} void Mod (char *ch1 , char *ch2) {// 保证ch1 >= ch2 : ch1 %= ch2 , 需要支持函数:Minus () , cmp (); int i , len1 , len2 , tmp; char ch3[MAXCHAR]; while (cmp (ch1 , ch2) >= 0) { len1 = strlen (ch1) , len2 = strlen (ch2); tmp = len1-len2-1 > 0 ? len1-len2-1 : 0; memcpy (ch3 , ch2 , (len2+1)*sizeof(char)); for (i=0;i<tmp;i++) ch3[len2 + i] = '0'; ch3[len2 + i] = '\0'; Minus (ch1 , ch3 , ch1); } return ; } int main () { char ch1[MAXCHAR] , ch2[MAXCHAR] , ch3[MAXCHAR]; while (scanf ("\n%s %s" , ch1 , ch2) != EOF) { Add(ch1,ch2,ch3); printf ("两数之和:%s\n" , ch3); Minus(ch1,ch2,ch3); printf ("两数之差:%s\n" , ch3); MUL(ch1,ch2,ch3); printf ("两数之积:%s\n" , ch3); Div(ch1,ch2,ch3); printf ("两数之商:%s\n" , ch3); } return 0; } 我的高精度模版。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样移动手机应用的位置 不戴安全套但没有射精会怀孕吗 青岛哪所学校空乘专业就业率高 属牛的是什么星座1985年 m.xzw.com m.xingzuo360.cn 敏卡·凯利基本信息 想问一下eve用什么船刷古斯塔斯怪比较好?如果能有配置图就更好了... EVE加达里恐惧古斯塔斯小型控制塔一个月要多少燃料块 eve古斯塔斯据点需要打建筑么? 对煮饭手艺好的 应该用什么词语修饰 去哪里搜上海中小学教师招聘信息呢,怎么找都找不到呀,大家来帮帮忙吧... 求一段用C语言计算两个大数乘法的代码,尽量越短越好 北京口腔第二门诊部种植一颗牙要多少钱? 如何在JAVA中,输入两个很大的数字使他们相乘后,得到正确结果结果? 北京大学口腔医院第二门诊部和第三门诊部哪个好些啊? c语言大数乘法的原理是什么? 北京中诺第二口腔医院怎么样? 求一C语言编程:求两个大数的乘积。 请问北大口腔医院 和 北大口腔医院第二门诊部 是一个医院么?他们之间有什么关系啊?哪家看牙好一点呢? C语言课程设计---大数乘法运算 C语言大数乘法求解~ 北京大学口腔医院的各个门诊哪个好?- 问一问 如何快捷计算大数乘法? 北京大学口腔医院第二门诊部怎么样 烤火铁观音的功效与作用 大数相乘 快速算法 北大口腔医院第二门诊部地址 关于C语言两个大数相乘 一、 两个大数相乘问题 以前的人烤火用的火笼是什么样的,用什么做的,有什么好处和坏处? 烤火对膝盖有好处吗 北京大学口腔医院第二门诊部是莆田系吗 描写连翘的句子 描写连翘花的古诗 写连翘的一段话 哪两个最大数相乘积是184 描写“连翘花”的古诗有哪些? 北大口腔医院第二门诊部,不预约直接去可以吗 描写连翘花的作文 用c语言编写程序:用函数实现两个大数相乘,用户可以通过菜单选择不同的等式进行运算 北京大学口腔医院第二门诊部和第三门诊部哪个好? 那里收费怎么样啊? C语言编程求两个大数的乘积,帮忙看一个程序分析一下 连翘花的作文300字 北京中诺第二口腔医院有限公司怎么样? C语言,求两个大整数的乘积,解释详细一点。 九如山连翘花即将漫山绽放,这里的景色有多美? 从富力又一城到北京大学口腔医院第二门诊部怎么坐公交或地铁? 我想咨询一下北京大学口腔医院第二门诊部拔智齿的费用 关于北大口腔医院第二门诊部的预约和复诊问题 连翘花茂密的生长着改为比喻句? 春天的发现日记600字 连翘花