题目链接:UVA424
大数相加问题,模拟手算即可,具体看代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char number[255]={'0'};
int answer[260]={0};
void reverse(char* pointer);
int main()
{
int maxIndex=0;
while(scanf("%s",number)&&strcmp(number, "0"))
{
int length=strlen(number);
reverse(number);
int index;
int carryBit=0;
for(index=0;index<length;index++)
{
carryBit=answer[index]+(number[index]-'0')+carryBit;
answer[index]=carryBit%10;
carryBit=carryBit/10;
}
while(carryBit)
{
carryBit=answer[index]+carryBit;
answer[index++]=carryBit%10;
carryBit=carryBit/10;
}
if(index>maxIndex)
maxIndex=index;
}
int flag=1;
for(int i=maxIndex;i>0;i--)
{
if(flag)
{
if(answer[i])
{
cout<<answer[i];
flag=0;
}
}
else
cout<<answer[i];
}
cout<<answer[0]<<endl;
memset(number,'0',255);
return 0;
}
void reverse(char* pointer)
{
int length=strlen(pointer);
char temp;
for(int i=0,j=length-1;i<j;i++,j--)
{
temp=pointer[i];
pointer[i]=pointer[j];
pointer[j]=temp;
}
}