算法——大数加法
来源:互联网 发布:拆分盘源码 编辑:程序博客网 时间:2024/06/05 15:26
将两个无法使用基本数据类型存储的大数进行加法运算。
基本思路:
使用字符串类型进行输入输出,处理时将其每一位转换成int类型,进行加减和进位。
C语言实现:
这个是自己编完,根据网上的其他代码进行了一些修改删减得出的代码。个人认为相比网上的一些代码,更具有可读性和实用性,还是比较值得记录的。
#include <stdio.h>#include <string.h>#define MAXSIZE 101void add(char a[],char b[],char s[]){ int i; //转化为整数 int sizea=strlen(a); int inta[MAXSIZE-1]={0}; for(i=0;i<sizea;i++) inta[i]=(int)(a[i]-'0'); int sizeb=strlen(b); int intb[MAXSIZE-1]={0}; for(i=0;i<sizeb;i++) intb[i]=(int)(b[i]-'0'); //逆序加数 int e=0; for(i=0;i<sizea/2;i++){ e=inta[i]; inta[i]=inta[sizea-i-1]; inta[sizea-i-1]=e; } for(i=0;i<sizeb/2;i++){ e=intb[i]; intb[i]=intb[sizeb-i-1]; intb[sizeb-i-1]=e; } //相加 int sum[MAXSIZE]={0}; for(i=0;inta[i]!=0||intb[i]!=0;i++){ sum[i+1]=(sum[i]+inta[i]+intb[i])/10; sum[i]=(sum[i]+inta[i]+intb[i])%10; } //转化结果为char int j; for(j=0;j<i+1;j++) s[j]=sum[j]+'0'; //排除最高位为0的可能 if(s[i]=='0') s[i]='\0'; else s[i+1]='\0'; //逆序结果 char m; for(i=0;i<strlen(s)/2;i++){ m=s[i]; s[i]=s[strlen(s)-i-1]; s[strlen(s)-i-1]=m; }}//大数相加int main(){ char a[MAXSIZE]; char b[MAXSIZE]; char s[MAXSIZE+1]; printf("请输入大数a:"); gets(a); printf("请输入大数b:"); gets(b); add(a,b,s); printf("结果为:\n"); printf("%s",s); return 0;}
阅读全文
0 0
- 算法——大数加法
- 大数——大数加法
- 大数系列——大数加法
- 大数运算(2)——大数加法
- 大数加法算法
- 大数加法运算算法
- 算法提高 大数加法
- 大数运算——加法
- 大数运算——加法
- 大数加法——HOJ1002
- 大数运算——加法
- 蓝桥杯——算法提高 大数加法&大数乘法&冒泡排序
- 每日算法之大数加法
- 蓝桥杯 算法提高 大数加法
- 大数运算——加法,减法,乘法
- 大数运算——加法,减法,乘法
- 大数运算——加法,减法,乘法 .
- 大数加法——DLUT热身赛题解
- ES6学习笔记
- 设计模式-----状态模式
- 搜索引擎solr系列---安装步骤
- 4. RCC外设的学习和理解
- 通知栏notification的一些使用代码
- 算法——大数加法
- BufferedReader源码分析与使用
- Oracle中 表空间,数字函数,日期函数,转换函数,同义词,反向键索引
- [论文阅读] EIE: Efficient Inference Engine on Compressed Neural Network
- 配置servlet的<load-onstartup>
- 认识javascript中的this
- JAVA RMI远程方法调用简单实例
- CVTE0917电话面试
- 算法技巧3:函数传值问题