栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2021-11-22 C语言学习应用——用C语言实现大数相乘

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-11-22 C语言学习应用——用C语言实现大数相乘

目录

思路:

实现过程:

准备:

代码:

总结:

欢迎各位道友指出错误助我进步 


思路:

        提到大数相乘,的确让人很头疼,对于初学者来说,大数无法通过正常的输入输出表示,无法简便计算,甚至无法转化拼接。所以很多人在面对这些大数时找不到头脑。

        所以我第一次思考这种问题时大致的思路是,把两个大数,从末尾开始,逐位相乘,结果通过存于一个数组(倒序存放),并进行进位计算,最后只要将数组输出即可。

实现过程:

准备:

        通过日常生活中的观察可以发现,任意两个数相乘后位数不超过原来两个数位数之和,这一点发现正好弥补了数组不能用未知数定义的缺陷,也为代码中循环语句提供了一个准确的范围。

理论存在,实践开始!

代码:
​
//大数相乘
#include
#include
//要运用到memset,strlen两个函数
#include
//定义一个宏变量M=10005
#define M 10005
char s1[M], s2[M];
int a[M], b[M], c[M];
int main() {
	int i, j, wie1, wie2, wie3;
	//判断输入内容是否为一个字符串
	while (~scanf_s("%s%s", s1, s2)) {
		//sizeof为一个单目运算符不用特殊头文件
		//memset用作给字符串或者指针初始化,在此意为将C中所有的字节换为‘0’
		memset(c, 0, sizeof(c));
		wie1 = strlen(s1);
		wie2 = strlen(s2);
		wie3 = wie2 + wie2;
		printf("s1的长度=%d s2的长度=%d", wie1, wie2);
		//一个简单的倒序
		for (i = 0; i < wie1; i++) {
			a[i] = s1[wie1 - i - 1] - '0';
		}
		for (i = 0; i < wie2; i++) {
			b[i] = s2[wie2 - 1 - i] - '0';
		}
		//乘法运算
		for (i = 0; i < wie1; i++)
			for (j = 0; j < wie2; j++)
				c[i + j] += a[i] * b[j];
		for (i = 0; i <= wie3; i++) {
			if (c[i] >= 10) {
				c[i + 1] += c[i] / 10;
				c[i] %= 10;
			}
		}
		//去除多余的‘0’
		i = wie3;
		while (c[i] == 0)
			i--;
		//判断结果是否为‘0’,逆序打印
		if (i < 0)
			printf("0");
		else {
			for (; i >= 0; i--)
				printf("%dn", c[i]);
		}
	}
	return 0;
}

​

总结:

大数相乘的确很复杂,但是很多语言都能实现大数相乘,现在用C++,java实现较多,还有Python,每一种编程语言都有自己的优势,相较于他们来说,我认为C语言还是比较麻烦的,因为确实C中很多函数,代码要自己写,不像其他语言直接分装好直接用。

        以上便是本次学习的分享和思考。

欢迎各位道友指出错误助我进步

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580727.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号