POJ:http://poj.org/problem?id=1503
这是一个求多位数加法的题,只有正数,思想上没有难度。
按加法从低位加起的方法即可,代码简单。
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const char TEN = '9' + 1;
void Add(char *p)
{
if(*p < TEN){
*p = *p;
}else {
*p = *p - TEN + '0';
p++;
*p += 1;
Add(p);
}
}
void Reverse(char *word)
{
char tmp;
int i,j;
for(i=0,j=strlen(word)-1; i<j; i++,j--){ //适合C风格字符串反转函数 // 来源 C++ Primer Plus 第五章 forstr2.cpp -- reversing an array
tmp = word[i];
word[i] = word[j];
word[j] = tmp;
}
}
int main (){
char a[101];
char sum[102];
int i,len;
bool start=false;
//char tmp;
memset(sum, '0', sizeof(sum));
// cout<<strlen(sum)<<sum[101]<<endl;
while(cin>>a){
len = strlen(a);
if(len==1 && a[0]=='0'){ //end input
for(i=101; i>=0; i--){
if(!start && sum[i] != '0')
start = true;
if(start)
cout<<sum[i];
}
cout<<endl;
memset(sum, '0', sizeof(sum));
start = false;
}
Reverse(a);
//cout<<a<<endl;
for(i=0; i<len; i++){
sum[i] = sum[i] + a[i] - '0';
Add(sum+i);
}
}
return 0;
}
总结:
递归处理确实很方便。
C++提供的STL功能很强大,要去了解和学习