大数加法
来源:互联网 发布:知乎山姆休斯顿大学 编辑:程序博客网 时间:2024/05/23 00:07
大数相加,要考虑是否进位,多位数相加的时候,用数组可能会爆,老师告诉我们可以用string来保留数组的作用,而且不会有位数的限制。
道理都差不多,只是表示的方法不同。
#include <iostream>#include <string.h>#include <string>using namespace std;char mmm(char &x,char y,char z){int A=x+y+z-3*48;x=A%10+'0';return A/10+'0';}int main(){string hk,ls,HK;char l;int len,len1,a;cin>>a;while(a--){while(cin>>hk>>HK){if(hk.length()<HK.length()){ls=hk;hk=HK;HK=ls;}len=HK.length()-1;len1=hk.length()-1;l='0';while(len1>=0){if(len>=0) l=mmm(hk[len1--],HK[len--],l);else l=mmm(hk[len1--],'0',l);}if(l!='0'){cout<<l;}cout<<hk;}}return 0;}
数组方法;
#include <stdio.h>#include <string.h>#define MAX_LEN 200int an1[MAX_LEN+10];int an2[MAX_LEN+10];char szLine1[MAX_LEN+10];char szLine2[MAX_LEN+10];int main(void){scanf("%s", szLine1);scanf("%s", szLine2);int i, j;memset( an1, 0, sizeof(an1));memset( an2, 0, sizeof(an2));int nLen1 = strlen( szLine1);for( j = 0, i = nLen1 - 1;i >= 0 ; i --)an1[j++] = szLine1[i] - '0';int nLen2 = strlen(szLine2);for( j = 0, i = nLen2 - 1;i >= 0 ; i --)an2[j++] = szLine2[i] - '0';for( i = 0;i < MAX_LEN ; i ++ ) { an1[i] += an2[i]; //逐位相加if( an1[i] >= 10 ) { //看是否要进位an1[i] -= 10;an1[i+1] ++; //进位}}for( i = MAX_LEN; (i >= 0) && (an1[i] == 0); i -- ) ;if(i>=0)for( ; i >= 0; i--)printf("%d", an1[i]);else printf("0");return 0;}
string 用起来比较方便。
0 0
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- ListView用法简单学习
- codeforces 703C Chris and Road
- echars 自定义触发鼠标悬停事件
- css基础重要几点
- AMC-ICPC Live Archive 7295 和 CSU 1715
- 大数加法
- Java中的对象流总结
- OJ系统上线——OJ.BoilTask.com
- ESP8266开发中的流水账
- syslinux制作U盘启动器
- Maven运行java程序命令及VM参数设置
- 随机获取数组的子集
- JavaScript笔记——引用类型之Object类型和Function类型
- 安卓源码在线查看网站