ACM简单处理大数加法方法
来源:互联网 发布:启明星软件 功能 编辑:程序博客网 时间:2024/06/05 08:25
在ACM刷题中,处理大数问题,如大数加法,减法,乘法,除法,高精度计算,一般都用字符数组处理。
1.大数加法
处理方法:模拟两个数相加过程:从低位开始相加,有进位则做进位处理
两数相加过程:
但是处理过程并不完一样:具体方法:将两个大数分别存入两字符数组中,因为要处理进位问题,所以把两数颠倒之后放入两整型数组中去(最高位有进位时,如果不颠倒,处理起来会比较麻烦),然后从低位开始相加到高位,先不做进位问题,加完之后再进位,然后在把结果存入字符数组中
代码:
#include<stdio.h>
#include<string.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define max a>=b?a:b
int main()
{
char sa[400],sb[400],s[400]; //用来存放两个大数
int sum[400],lena,lenb,maxl,i,d;
scanf("%s %s",sa,sb);
mem(sum,0); //将数组sum清0
lena=strlen(sa);
lenb=strlen(sb);
maxl=max(lena,lenb);
for(i=lena-1;i>=0;i--)
sum[lena-1-i]=sa[i]-'0';
for(i=lenb-1;i>=0;i--)
sum[lenb-1-i]+=sb[i]-'0'; //把两大数从个位开始对应相加,先不做进位处理
for(i=0,d=0;i<maxl;i++) //进位初始化为0
{
sum[i]+=d;
d=sum[i]/10;
sum[i]%=10;
} //从个位开始处理进位
if(d>0) //如果最高位有进位
sum[maxl++]+=d;
for(i=maxl-1;i>=0;i--)
s[maxl-1-i]=sum[i]+'0'; // 结果存入字符数组s中
s[maxl]='\0';
printf("%s\n",s);
return 0;
}
- ACM简单处理大数加法方法
- ACM:蓝桥杯:大数处理:高进度加法
- ACM 大数加法
- [ACM]模拟大数加法
- 大数加法的处理技巧
- ACM--26进制加法--HDOJ 2100--Lovekey--大数--字符串处理
- hdu1002(简单大数加法)
- ACM大数的处理
- 南邮ACM 1011 大数加法 JAVA解法
- ACM~大数加法&&hdu题目样例
- 杭电acm-1002题-大数加法
- [ACM Steps] Hat's Fibonacci 大数加法 另一种节约空间的方法
- 大数加法(仅能处理正数)
- hdu 的一个简单的大数加法
- java对ACM大数处理
- 大数加法
- 大数加法
- 大数加法
- moris算法----树的非递归的遍历实现(前序和中序)
- (练习)调整数组顺序 使奇数位于偶数前面
- 共用体使用常用规范
- php——学习笔记,分割字符串,查找字符串,替换字符串
- poj2251
- ACM简单处理大数加法方法
- 《JavaScript DOM编程艺术》笔记
- 入侵检测
- 无向图欧拉回路
- HDU 1863 畅通工程(最小生成树)
- poj 2299 Ultra-QuickSort(归并排序求逆序对)
- (练习)冒泡排序
- 黑马程序员——集合
- hdu 4858 容器的简单模拟