您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
如何用C语言实现长整数四则运算?
链表,整数,代表如何用C语言实现长整数四则运算?
发布时间:2016-12-08加入收藏来源:互联网点击:
如何用C语言实现长整数四则运算?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
给粗一个leetcode题目作为参考:
原题:You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8Explanation: 342 + 465 = 807.
翻译:这里有两组代表非负数(如:342)的链表,是以相反的方向来存放每一位的(如:2->4->3),问:将这个两个链表代表的非负数相加,然后返回一个新链表代表这个结果。
举例:输入: (2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7 -> 0 -> 8结果: 342 + 465 = 807.
一,我的错误思路:假设输入的是链表a 和链表 b
1.先计算出a, b代表的数字N1 , N2. 然后计算出两者的和:N1+N2=N3.算出N3每一位的数字,然后将反向取得链表c
为什么上面的方案不行?
如果单纯从思路来看,是可行的,但是会遇到整数溢出的问题,试想如果输入的链表是[1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1] 的时候, 上面思路的第一步在转换链表到整数的时候就会出错。
二,那正确解法是:
1.将两个链表代表的值从头开始相加,得到新链表的元素2.每一次相加得到的值如果大于9,就在后面的相加中额外加13.如果加到两个链表的尾部,还有进位,就额外多创建一个新链表的元素放到末尾
总结:在对数据进行基本的运算法则时,要多从数据结构的角度来考虑问题,假如一开始就考虑到链表没有整型溢出的缺点,就少走了弯路
回答于 2019-09-11 08:43:50
大学里C语言课程没好好学吗?
这个题目应该是老师最喜欢布置的几个课程设计之一了。
这里懒得写具体的代码之类。只说思路。
不管你是要做128位还是256位还是更多位的整数四则运算,可以把这个大整数分解为32位整数的数组或者链表之类的数据结构来存储,然后再写几个进行加减乘除的函数来进行四则计算。
回答于 2019-09-11 08:43:50
__int64 a;
直接算...
回答于 2019-09-11 08:43:50
是C语言的标准long类型?还是其他要求?
上一篇:为什么现在小孩感冒去医院看病,医生都要求住院输液七天?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |