杭电acm1002答案
1个回答
展开全部
题意: 给t组数据a,b,输出这两个大数的和
具体思路: 模拟加法的笔算过程
出错提醒: 1、最多1000位,基本数据类型范围不够,所以用字符串
2、此外,格式要特别注意一下,复制过来再修改
两个测试数据之间是有一行空白行的,但是最后一个测试数据后面没有空白行
代码效率: 0MS 212K 1009 B GCC
BY feng [2010/5/26]
*/
#include <stdio.h>
#include <string.h>
#define MAX 1002
char a[MAX],b[MAX],c[MAX];
int len_c; //和的位数
void CaculateAB() //计算a和b
{
int i, len_a,len_b,len_add, digit_sum,carry; //digit_sum对应位数的和,carry进位
len_a =strlen(a);
len_b =strlen(b);
len_add = (len_a<=len_b)? len_a:len_b;
carry =0;
for(i=0;i<len_add;i++)
{
digit_sum=a[len_a-i-1]-48+b[len_b-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
if(len_a>len_b)
{
for(;i<len_a;i++)
{
digit_sum=a[len_a-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
}
else
{
for(;i<len_b;i++)
{
digit_sum=b[len_b-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
}
if(carry>0) c[i++] =carry+48;
len_c = i;
}
int main(void)
{
int t,i,k;
scanf("%d",&t);
for(k=0;k<t;k++)
{
scanf("%s%s",a,b);
CaculateAB();
printf("Case %d:\n%s + %s = ",k+1,a,b);
//c保存的是和的逆序排列,要逆序输出
for(i=0;i<len_c;i++)
{
printf("%c",c[len_c-i-1]);
}
printf("\n");
if(k<t-1) printf("\n"); //***,这里注意一下不然会Presentation Error
}
return 0;
}
具体思路: 模拟加法的笔算过程
出错提醒: 1、最多1000位,基本数据类型范围不够,所以用字符串
2、此外,格式要特别注意一下,复制过来再修改
两个测试数据之间是有一行空白行的,但是最后一个测试数据后面没有空白行
代码效率: 0MS 212K 1009 B GCC
BY feng [2010/5/26]
*/
#include <stdio.h>
#include <string.h>
#define MAX 1002
char a[MAX],b[MAX],c[MAX];
int len_c; //和的位数
void CaculateAB() //计算a和b
{
int i, len_a,len_b,len_add, digit_sum,carry; //digit_sum对应位数的和,carry进位
len_a =strlen(a);
len_b =strlen(b);
len_add = (len_a<=len_b)? len_a:len_b;
carry =0;
for(i=0;i<len_add;i++)
{
digit_sum=a[len_a-i-1]-48+b[len_b-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
if(len_a>len_b)
{
for(;i<len_a;i++)
{
digit_sum=a[len_a-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
}
else
{
for(;i<len_b;i++)
{
digit_sum=b[len_b-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
}
if(carry>0) c[i++] =carry+48;
len_c = i;
}
int main(void)
{
int t,i,k;
scanf("%d",&t);
for(k=0;k<t;k++)
{
scanf("%s%s",a,b);
CaculateAB();
printf("Case %d:\n%s + %s = ",k+1,a,b);
//c保存的是和的逆序排列,要逆序输出
for(i=0;i<len_c;i++)
{
printf("%c",c[len_c-i-1]);
}
printf("\n");
if(k<t-1) printf("\n"); //***,这里注意一下不然会Presentation Error
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
创远信科
2024-07-24 广告
2024-07-24 广告
作为上海创远仪器技术股份有限公司的团队成员,我们积累了广泛的介电常数数据。这些数据覆盖了从常见物质如空气、水、塑料到专业材料如聚苯乙烯、环乙醇等的介电常数。通过精心整理和分析,我们汇编了介电常数表合集,为客户提供了宝贵的参考信息。这些数据不...
点击进入详情页
本回答由创远信科提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询