hdoj已做题目 1042 1042 1047
解题思路:
通过定义字符串来完成大整数类的加减乘除,直接输出字符串来完成输出结果。
将输入的字符串转化为数字进行运算然后再输出到字符串
注意字符串的翻转以及较短的字符串优先结束运算然后对较长的单独运算 进位注意
源代码:
# include <stdio.h>
# include <iostream>
using namespace std;
char * add(char *a,char *b)
{
int lena=strlen(a);
int lenb=strlen(b);
int max=lena>lenb?lena:lenb;
char *sum=(char *)malloc(max+2);//将结果储存在sum数组里面
memset (sum,'0',max+2);
int i=0,cin=0;//cin为进位
while ((lena-->0)&&(lenb-->0))//当a和b都有值的时候
{
int t=a[lena]+b[lenb]-'0'-'0';
sum[i]=(t+cin)%10+'0';
cin=(t+cin)/10;
i++;
}
while (lena>=0)
{
int t=a[lena]-'0';
sum[i]=(t+cin)%10+'0';
cin=(t+cin)/10;
i++;
lena=lena-1;
}
while(lenb>=0)
{
int t=b[lenb]-'0';
sum[i]=(t+cin)%10+'0';
cin=(t+cin)/10;
i++;
lenb--;
}
if (cin!=0)
{
sum[max]=cin+'0';
sum[max+1]='\0';
}
else
{
sum[max]='\0';
}
strrev(sum);
return sum;
}
int main ()
{
int m;
while (scanf("%d",&m)!=EOF)
{
int i;
for(i=0;i<m;i++)
{
char a[100],b[100];
scanf("%s %s",a,b);
char *p=add(a,b);
printf("Case %d:\n",i+1);
printf("%s + %s =%s\n",a,b,p);
if (i!=m-1)
printf("\n");
}
}
return 0;
}