C语言实现两个超大数组相加
2018-03-29 00:19
477 查看
//任意两个一百位以上的整数相加;
//用字符串存储,数组输入相加后的和并输出;
//由于不知道相加后的结果,而且数组没办法提前知道所得结果的长度,所以需要将数组设置的尽量大;
//结果: 举例: s1 123456789
s2 987654321
![](https://img-blog.csdn.net/20180329001856305?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Z1dHVyZV9MTA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
//不懂的可以留言,希望能帮到你,看到留言我会回复;
//用字符串存储,数组输入相加后的和并输出;
//由于不知道相加后的结果,而且数组没办法提前知道所得结果的长度,所以需要将数组设置的尽量大;
#include<stdio.h> #include<string.h> #define N 200 //设定存储相加之和的数组大小; int main(void) { char s1[100],s2[100],*s=s1; //注意这里的指针s指向字符数组s1上; int R ,cp=0; //输入两个字符串; printf("输入第一个字符串:"); gets(s1); printf("输入第二个字符串:"); gets(s2); //初始化,因为数学运算相加需要从各位开始,所以刚开始两个数组的数字要从最后一位开始; int i=strlen(s1)-1; int j=strlen(s2)-1; int k=N-1; //相加后的结果也要从 最后一位开始存储到数组中; //计算; while(i>-1&&j>-1) //两个字符串都没有完; { //因为字符型数字的转换成整型需要减去这个字符型数字的ASCII码; //cp表示进位的数字,刚开始cp=0; int x=s1[i--]-'0'+s2[j--]-'0'+cp; R[k--]=x%10; cp=x/10; } if(j>-1) //如果s2没完,将本来指向s的指针指向s2; { i=j; s=s2; } while(i>-1) //由上个if判断s1和s2那个没完,将剩下的数字按照位输入到整形数组R中; { int x=s[i--]-'0'+cp; //此时的cp表示上面的循环中可能还有进位,所以这里的cp不需要清空; R[k--]=x%10; cp=x/10; } if(cp) //*重要* 判断最高位是否需要进位; R[k--]=cp; //输出; printf("\n两个字符串相加后的存储结果为:\n"); for(i=k+1;i<N;i++) printf("%d",R[i]); printf("\n"); return 0; }
//结果: 举例: s1 123456789
s2 987654321
//不懂的可以留言,希望能帮到你,看到留言我会回复;
相关文章推荐
- 两个超大整数相加之数组实现
- C语言- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现。
- java实现两个超大数相加,字符串实现
- (面试题)请用C语言实现在32位环境下,两个无符号长整数相加的函数,相加之和不能存储在64位变量中
- /*算法从9个数中取出3个3位数其中两个3位数相加等于另一个3位数其中每位数字不能重复,c语言怎么实现*/
- C语言实现 求两个数组的交集
- 用C语言实现交换两个数组的元素
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- java实现 数组中两个元素相加等于指定数的所有组合
- 两个超大正整数相加问题之链表实现(代码惨不忍睹,慎进)
- 用运算符重载“+”的方法直接实现两个一维数组对应元素的相加
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- C语言 实现两个数组内容交换
- C语言实现两个复数相加
- php实现两个数组相加的方法
- C语言用指针实现两个数组值互换
- php实现两个数组相加的方法
- 写一个功能函数实现从数组中找出两个值相加等于某一个值,要求时间复杂度为 n;
- 用C语言实现判断两个数组中是否有相同的元素,有就输出“有”,没有则输出“没有”
- c语言实现两个文件内数据相加