@[limaopipi2022](/user/160839)
你要考虑a[0]可能为0的情况。你用:
```
for (int i = n.a[0] - 1; i; --i)
```
可能会造成无限循环。应该改成:
```
friend std::ostream & operator<<(std::ostream & a, ll n)
{
printf("%d", n.a[n.a[0]]);
for (int i = n.a[0] - 1; i >= 0; --i)
printf("%04d", n.a[i]);
return a;
}
```
另外:
```
inline void Insert(int sta,ll num)
{
int T=sta%100;
for(Hash*i=h[T];i;i=i->nx)if(sta==i->sta)return void(i->num+=num);
s[now][++cnt[now]]={sta,num,h[T]};h[T]=s[now]+cnt[now];
}
```
是一个无返回值的函数,但是你又:
```
return void(i->num+=num);
```
这种操作我从来没见过,又不是返回指针。
by metaphysis @ 2020-05-04 19:34:19
@[metaphysis](/user/333388) 下面返回void类型,所以我强转void
by Prean @ 2020-05-04 19:34:57
@[limaopipi2022](/user/160839)
没有返回值,不用返回,也不用强制转换。除非你是这样的函数:
```
void* f(int n)
{
int *r;
//...
return (void *)r;
}
```
by metaphysis @ 2020-05-04 19:43:36
@[metaphysis](/user/333388) 那我怎么写?写
```cpp
return i->num+=num,void();
```
吗(
而且这个也没问题啊(
by Prean @ 2020-05-04 19:49:37
@[limaopipi2022](/user/160839)
```
inline void Insert(int sta, ll num)
{
int T = sta % 100;
for (Hash * i = h[T]; i; i = i->nx)
if (sta == i->sta)
i->num += num;
s[now][++cnt[now]] = { sta, num, h[T]};
h[T] = s[now] + cnt[now];
}
```
by metaphysis @ 2020-05-04 19:52:37
@[metaphysis](/user/333388) 不是没有返回值啊。。。
void是void类型而不是没有,要返回一个void型的变量,而我算出来之后强转void,返回的也是void,根本不会出问题好吧QwQ
by Prean @ 2020-05-04 19:52:59
@[metaphysis](/user/333388) 我喷,这是哈希,你找到重复了的就要返回啊。。。。。。
by Prean @ 2020-05-04 19:53:30
@[limaopipi2022](/user/160839)
可以换个方式返回,这样不规范。
by metaphysis @ 2020-05-04 19:56:39
我没有具体看你代码的意图,不知道你是要判重。
by metaphysis @ 2020-05-04 19:57:43
@[metaphysis](/user/333388) 然而这样是没问题的,我插头DP模板题的哈希也是这样的,假如你看不顺眼的话在你眼里不是这样就行了
并且我写出这一段代码的时候编译器并没有骂我
by Prean @ 2020-05-04 19:58:05