一个小WA点:数据范围写的1~1000,实际上第五点包括了0
  • 板块P2415 集合求和
  • 楼主Edaw_
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/13 19:20
  • 上次更新2023/12/13 21:55:00
查看原帖
一个小WA点:数据范围写的1~1000,实际上第五点包括了0
218560
Edaw_楼主2023/12/13 19:20
//这是一个用一维数组手动进位来代替高精度的方法
for(int j=0; j<i; j++)
	{
		sum+=a[j];
	}
	for(int k=0; k<20; k++)//用一维数组模拟的longlong,长度不超过20
	{
		b[k]=sum%10;
		sum/=10;
		b[k]*=pow(2,i-1);////每个元素共出现pow(2,n-1)次(n为元素数量),所以所有元素加和之后先按数位(十位百位千位..)存到一维数组里,再对每个数位做乘算,最大不超过9*2^29,所以数组用longlong绝对存的下
	}
for(int k=0; k<20; k++)
	{
		if(b[k]>=10)
		{
			b[k+1]+=b[k]/10;
			b[k]%=10;//单独拿出数组来手动进位
		}
	}
	for(int k=20; k>=0; k--)
	{
		if(b[k]!=0)//初始化时后面几位都是零
		{
			for(int g=k; g>=0; g--)
			{
				cout<<b[g];//从非零的一位开始逆序输出
			}
			return 0;//问题来了,这里没有结束循环就返回函数值,如果数组里存了东西那不会有问题,但是存的是零的话if和return都不会执行
		}
	}
	//所以这里还要加一个cout<<"0",不然第五个点会WA
	return 0;
2023/12/13 19:20
加载中...