大数加法

来源:互联网 发布:知乎山姆休斯顿大学 编辑:程序博客网 时间: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