本机测试没有问题,但是提交后只有第4个对了,求助各位大佬
查看原帖
本机测试没有问题,但是提交后只有第4个对了,求助各位大佬
240709
woshishuilaizhe楼主2023/8/29 12:17
//P1601 A+B Problem(高精) 
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	char a[501], b[501], c[501];//a+b=c
	for(int i=0; i<=500; i++){a[i]='/';b[i]='/';c[i]='/';}//定义初始值,为了方便后面就用了比'0'小1的'/' 
	scanf("%[^\n]",&a);//输入第一行(第一个加数) 
	getchar();//使第二行可以输入 
	scanf("%[^\n]",&b);//输入第二行(第二个加数) 
	while(true)//让两个数个位对齐 
	{
		a2:for(int j=500; j>=0; j--)//从后向前判断 
		{
			if(a[j]!='/'&&b[j]!='/')goto a1;//两个数个位对齐后去运算 
			else if(a[j]=='/'&&b[j]!='/')//如果b的个位更靠后 
			{
				for(int k=500; k>0; k--)a[k]=a[k-1];//把a整体向后移动一格 
				a[0]='0';//把a空出来的那一位数赋值0以便计算 
				goto a2;//去循环下一遍 
			}
			else if(a[j]!='/'&&b[j]=='/')//如果a的个位更靠后 
			{
				for(int k=500; k>0; k--)b[k]=b[k-1];//把b整体向后移动一格 
				b[0]='0';//把b空出来的那一位数赋值0以便计算 
				goto a2;//去循环下一遍 
			}
		}
	}
	a1:for(int i=0; i<max(strlen(a), strlen(b)); i++)//开始计算 
	{
		c[i+1] += (a[i]-48)+(b[i]-48)+1;//计算 
		for(int j=i+1; j>=1; j--)//循环判断进位 
		{
			if(c[j]>'9')//如果进位那就处理一下 
			{
				c[j]-=10; 
				c[j-1]++;
				if(j-1==0)c[j-1]++;//把外面循环照顾不到的地方特殊处理一下 
			}
		}
	}
	for(int i=0; i<=500; i++)//输出结果 
	{
		if(c[i]!='/')cout<<c[i];//只输出不是初始值的 
	}
	return 0;
}
2023/8/29 12:17
加载中...