题目大意:输入最多100行数据,每个数据最多100位数字,输入0后结束输入。求和。
解题思想:输入为从高位到低位,且数据位数不定,用char型存储。
int型数组进行加法运算后,依次\10进位,%10余本位。
#include <iostream>
#include <math.h>
using namespace std;
#define maxn 110
struct Bignum
{
int digit[maxn];
int cnt;
void operator = (char *str)
{
memset(digit,0,sizeof(digit));
int len=strlen(str);
for(int i=0;i<len;i++)
digit[i]=str[len-1-i]-'0';
cnt=len-1;
}
void operator += (Bignum num)
{
cnt=max(cnt,num.cnt);
for(int i=0;i<=cnt;i++)
digit[i]+=num.digit[i];
for(int i=0;i<=cnt;i++)
{
digit[i+1]+=digit[i]/10;
digit[i]=digit[i]%10;
}
if(digit[cnt+1])
cnt++;
}
void output()
{
for(int i=0;i<=cnt;i++)
printf("%d",digit[cnt-i]);
}
}sum,read;
char str[110];
int main()
{
sum="0";
while(scanf("%s",str),strcmp(str,"0"))
{
read=str;
sum+=read;
}
sum.output();
return 0;
}
strcmp(str1,str2) 相等返回0,大于返回1,小于返回-1。