计算A+B

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
在一行中给出一个字符串,请判断是否满足A + B格式,如果满足,输出计算结果,否则输出"skipped"。
此处A,B均为大于等于0的整数,不保证数据没有前导零。
输入描述:
第一行输入一个n, 1 \le n \le 1000n,1≤n≤1000,代表测试数据的组数。
接下来n行,每行输入一个长度不超过10000的字符串。
输出描述:
对于每组输入,输出结果

示例1
输入
4
2+2
1+2
+12
0+0
输出
4
3
skipped
0

分析:本题用常规整型计算肯定不行,要用字符串前后拆分加和,但是注意细节

#include<cstdio>
#include<cstring>
char a[10005];
int num[10005];//存放答案
void fun()//处理函数 
{
	int t,count=0; 
	scanf("%s",&a);//输入算式
	int len=strlen(a);
	if(a[0]=='+'||a[len-1]=='+')//当+在开头和结尾的时候 
	{
		printf("skipped\n");
		return;
	} 
	for(int i=0;i<len;i++)//找到加号 
	{
		if(a[i]=='+')
		{
			t=i;//记录下+号的位置
			count++; 
		} 
		
	}
	if(count>1||count==0)//当+号多余一个或者没有+号时 
	{
		printf("skipped\n");
		return;
	}
	int begin_1=0,begin_2=t+1,end_1=t-1,end_2=len-1;
	int c=0,k=0;
	while(end_1>=begin_1||end_2>=begin_2)//将+号前后从后往前加和 
	{
		int m1=0,m2=0;
		if(end_1>=begin_1)m1=a[end_1]-'0';
		if(end_2>=begin_2)m2=a[end_2]-'0';
		num[c++]=(m1+m2+k)%10;
		k=(m1+m2+k)/10;
		end_1--;
		end_2--;
	}
	if(k)
	{
		printf("%d",k);
	}
	for(int i=c-1;i>=0;i--)
	printf("%d",num[i]);
	printf("\n"); 
}
int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		fun();
	} 
	return 0;
} 

高精度加法计算核心:
num[c++]=(m1+m2+k)%10;
k=(m1+m2+k)/10;
注意:m1,m2之前必须是整型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值