思路:
1.大数,即会数据溢出的数,所以直接用 ‘ + ’ 是行不通的,我们需要把它转换成字符串进行计算;
2.而字符串是由字符组成的,需要运用 “ - ‘0’ ” 的操作,用内部的ASCII码进行转化;
以下是代码段,共两个版本,一个是C语言版本,一个是C++版本
C语言版本:
#include<stdio.h>
#include<string.h>
#define N 1000
void adjust(char s[],int size);
void add(char a[],char b[],char c[],int size);
int main()
{
int num;
int i,la,lb,size;
char a[N],b[N],result[N];
scanf("%d",&num);
for(i=0;i<num;i++)
{
scanf("%s%s",a,b);
printf("Case %d:\n",i+1);
printf("%s + %s = ",a,b);
la=strlen(a);
lb=strlen(b);
size=la>lb?la:lb+1;
adjust(a,size);
adjust(b,size);
add(a,b,result,size);
if(result[0]=='0')
puts(result+1);//从第一位开始
else
puts(result);
if(i<num-1)
putchar('\n');
}
return 0;
}
void adjust(char s[],int size)
{
int i,ls;
ls=strlen(s);
for(i=ls;i>=0;i--)
s[size--]=s[i];
for(;size>=0;size--)
s[size]='0';
}
void add(char a[],char b[],char c[],int size)
{
int i,dvalue,flag=0;
c[size]='\0';
for(i=size-1;i>=0;i--)
{
dvalue=a[i]-'0'+b[i]-'0'+flag;
if(dvalue>=10)
{
flag=1;
c[i]=dvalue-10+'0';
}
else
{
c[i]=dvalue+'0';
flag=0;
}
}
}
C++ 版本:
#include<iostream>
#include<stack>
using namespace std;
string a,b;
int sum,c,x;
int main()
{
stack<int> q;
cin >> a >> b;
int a_len = a.length(),b_len = b.length();
while(a_len!=0 || b_len !=0)
{
if(a_len!=0 and b_len !=0)
sum = (a[--a_len]-'0') + (b[--b_len]-'0') + c;
else if(a_len!=0)
sum = (a[--a_len]-'0') + c;
else if(b_len!=0)
sum = (b[--b_len]-'0') + c;
c = sum / 10;
x = sum % 10;
q.push(x);
}
if(c)
q.push(c);
while(!q.empty())
{
cout << q.top();
q.pop();
}
return 0;
}