大整数加法
来源:互联网 发布:淘宝信誉度等级表 编辑:程序博客网 时间:2024/06/06 06:46
#include <stdio.h>#include <string.h>#include <stdlib.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(){ scanf("%s", szLine1); scanf("%s", szLine2); int i, j; //库函数memeset将地址an1开始的sizeof(an1)字节内容置成0 //sizeof(an1)的值就是an1的长度 memset( an1, 0, sizeof(an1)); memset( an2, 0, sizeof(an2)); //下面将szLine1中存储的字符串形式的整数转换到an1中去, //an1[0]对应于个位 int nLen1 = strlen( szLine1); j = 0; for( i = nLen1 - 1;i >= 0 ; i --) an1[j++] = szLine1[i] - '0'; int nLen2 = strlen(szLine2); j = 0; for( 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] ++; //进位 } } bool bStartOutput = false; //此变量用于跳过多余的0 for( i = MAX_LEN; i >= 0; i-- ) { if( bStartOutput) printf("%d", an1[i]); //如果多余的0已经都跳过,则输出 else if( an1[i] ) { printf("%d", an1[i]); bStartOutput = true; //碰到第一个非0的值,就说明多余的0已经都跳过 } } if(!bStartOutput) //结果为0特殊处理 printf("0"); system("pause"); return 0;}
/******************************************/* 杭电ACM1002:A + B Problem II/* 2010/10/1/* VC 6.0 by 52coder/* persever2009@gmail.com******************************************/#include <iostream>using namespace std; string Sum_calc(string s1,string s2){ int length; //比较s1,s2的长度 if (s1.length()>=s2.length()) { length=s1.length(); string tmp(s1.length()-s2.length(),'0'); s2=tmp+s2; } else { length=s2.length(); string tmp(s2.length()-s1.length(),'0'); s1=tmp+s1; } string sum(length,'0'); //carry 进位标志位 int carry = 0; for (int k=length-1;k!=-1;--k) //注意从低位开始进行运算 { //字符'0'对应ASCII码为48 sum[k]=(s1[k]+s2[k]+carry-96)%10+48; //字符和数字的转换需要注意 carry=(s1[k]+s2[k]+carry-96>9); } //最高位进位后,进位处理 if (carry) sum='1'+sum; return sum; } void main(){ int T; //The number of test cases; cin>>T; //use the dynamic array when not knowing the dimension before compiling; string *A = new string[T]; string *B = new string[T]; string *Sum = new string[T]; for (int i=0; i!=T; ++i) { cin>>A[i]>>B[i]; Sum[i] = Sum_calc(A[i], B[i]); } for (int j=0; j!=T; ++j) { cout<<"Case "<<j+1<<":"<<endl<<A[j]<<" + "<<B[j]<<" = "<<Sum[j]; if(i!=T-1) cout<<endl; }