http://acm.hdu.edu.cn/showproblem.php?pid=1002
A + B Problem II
话不多说,就是很简单、很直接高精度加法。有多组用例。一般情况下都是反向字符串进行计算。
C语言实现
#include<stdio.h>
#include<string.h>
int T;
char a[1005]={0},b[1005]={0},sum[1005]={0},tmp;
int main(){
scanf("%d",&T);
int kase=0;
while ( T-- ){
scanf("%s%s",a,b);
int i,j;
printf("Case %d:\n",++kase);
printf("%s + %s = ",a,b);
for (i=0;i<1005;i++) sum[i]='0'; //清空sum为字符'0'
//反向字符串
for(j=0;a[j]!='\0';j++); j--;
for(i=0;i<j;i++,j--){
tmp=a[i];a[i]=a[j];a[j]=tmp;
}
for(j=0;b[j]!='\0';j++); j--;
for(i=0;i<j;i++,j--){
tmp=b[i];b[i]=b[j];b[j]=tmp;
}
//模拟加法
for(i=0;a[i]!='\0'&&b[i]!='\0';i++){
sum[i]+=(a[i]+b[i]-48-48);
if( sum[i]>'9' ){ //进位问题
sum[i]-=10;
sum[i+1]+=1;
}
}
if(a[i]=='\0')
for(;b[i]!='\0';i++)
sum[i]+=b[i]-48;
else
for(;a[i]!='\0';i++)
sum[i]+=a[i]-48;
for(;sum[i]!='0';i++); sum[i]='\0'; //补上最后结束符
for(j=0;sum[j]!='\0';j++);j--;//sum反串
for(i=0;i<j;i++,j--){
tmp=sum[i];sum[i]=sum[j];sum[j]=tmp;
}
printf("%s\n",sum);
if(T) printf("\n");
memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(sum,0,sizeof(sum));
}
return 0;
}
C++实现
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
string add(string s1,string s2) {
int len_a=s1.length(),len_b=s2.length();
if(len_a < len_b) {
string temp = s1;
s1 = s2;
s2 = temp;
}
int i,j;
for(i = len_a-1, j = len_b-1;i>=0;i--,j--) {
s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));
if(s1[i]-'0'>=10) {
s1[i]='0'+(s1[i]-'0')%10;
if(i) s1[i-1]++;
else s1='1'+s1;
}
}
return s1;
}
string A,B,C;
int main(){
while(cin>> A>> B) {
C=add(A,B);
cout<< C<< endl;
}
return 0;
}