自己测能过,但为什么最后一个数据十位多了一个
查看原帖
自己测能过,但为什么最后一个数据十位多了一个
615783
Ramstol楼主2022/3/25 23:07

数据

in 文件
350204156568812004512541458715942878921069349854678
5120132301230048014584016540526804565814706519846494321001345794503242112976563432120
out 文件
5120132301230048014584016540526804916018863088658498833542804510446121034045913286798

但我跑出来最后是898,我不理解

#include <iostream>
#include <cstring>
using namespace std;
#define MAX 1000001
char a[MAX],b[MAX],c[MAX+1];
int aEnd,bEnd,cha,al_or_bl;//a,b的最大下标 strlen(a)是否大于strlen(b) 

int max(int al,int bl)
{
	if(al>=bl)return 1;
	return -1;
}

void inStr()//输入 
{
	scanf("%s",a);
	scanf("%s",b);
	aEnd=strlen(a)-1;
	bEnd=strlen(b)-1;	
	al_or_bl=max(aEnd,bEnd);
}

void create(char A[MAX],char B[MAX])//初始化 
{	
	if(al_or_bl==1)
	{	
		//处理B的'\0'为'0'
		int i,j;
		for(i=aEnd;i>bEnd;i--)
		{
			B[i]='0';
		}
		//B:"1200"->"0012"
		for(i=aEnd,j=bEnd;j>=0;i--,j--)//i从后到除了B的部分,j从开始到B末尾 
		{
			char temp=B[i];B[i]=B[j];B[j]=temp;
		}
	}
	if(al_or_bl==-1)
	{	
		//处理A的'\0'为'0'
		int i,j;
		for(i=bEnd;i>aEnd;i--)
		{
			A[i]='0';
		}
		//A:"1200"变成"0012"
		for(i=bEnd,j=aEnd;j>=0;i--,j--)//i从后到除了A的部分,j从开始到A末尾 
		{
			char temp=A[i];A[i]=A[j];A[j]=temp;
		}
	}
}

void add(char A[MAX],char B[MAX],char C[MAX+1])//加 
{
	const int num=aEnd>bEnd?aEnd:bEnd;//最大位数
	int i;
	for(i=0;i<=num;i++)//'0'->0
	{
		A[i]-='0';
		B[i]-='0';
	}
	for(i=0;i<=num;i++)
	{
		C[i]=A[i]+B[i];
	}
	for(i=num;i>=1;i--)//处理进位 
	{
		if(C[i]>=9)
		{
			C[i]%=10;
			C[i-1]++;
		}
	}
}

void print(char C[MAX+1])//打印 
{
	const int num=aEnd>bEnd?aEnd:bEnd;//最大位数
	int i;
	for(i=0;i<=num;i++)
	{	
		C[i]+='0';
	}
	if(C[0]>'9')
	{
		printf("1");
		C[0]=(C[0]-'0')%10+'0';
	}
	
	printf("%s",C);
}
int main()
{
	inStr();
	create(a,b);
	add(a,b,c);
	print(c);
}
2022/3/25 23:07
加载中...