一个ac都没有啊

B3954 [GESP202403 二级] 乘法问题

@[cjcjcjminecraft](/user/1311541) 定义 `a[n]` 调用的 `n` 可能是垃圾值,所以并不能保证 `a[n]` 有对应的储存空间。 另外 `long long` 的值范围只有 $-9223372036854775808\sim 9223372036854775807$,在这里是不够的,因为 $$100^{50}=10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000$$ 所以会超出 `long long` 表示范围从而溢出,溢出后的 `long long` 值是不正确的。
by Terrible @ 2024-05-10 20:49:35


@[cjcjcjminecraft](/user/1311541) 会爆数据
by LHM_zs @ 2024-05-10 20:50:18


```c #include<iostream> using namespace std; int main(){ long long n,a[100005],sum=1; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; sum*=a[i]; if(sum>1000000) { cout<<">1000000"; return 0; } } cout<<sum; return 0; } ``` @[cjcjcjminecraft](/user/1311541)
by LHM_zs @ 2024-05-10 20:51:14


可以尝试改成这样子: ```cpp #include<iostream> using namespace std; int main(){ long long n; cin>>n; long long a[n],sum=1;//a[n] 必须在输入 n 后定义 for(int i=0;i<n;i++){ cin>>a[i]; sum*=a[i]; if(sum>1000000){ cout<<">1000000"; return 0; } } cout<<sum; return 0; } ``` 也可以不使用数组采用临时值的方式读入。 ```cpp #include<iostream> using namespace std; int main(){ long long n; cin>>n; long long a,sum=1; for(int i=0;i<n;i++){ cin>>a; sum*=a; if(sum>1000000){ cout<<">1000000"; return 0; } } cout<<sum; return 0; } ```
by Terrible @ 2024-05-10 20:52:36


边做乘法变比较,要不然会爆ll
by Louisshen @ 2024-05-10 20:57:53


```cpp #include<bits/stdc++.h> using namespace std; int n; long long ans=1; int main() { ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++) { int a; cin>>a; ans*=a; if(ans>1e6) { cout<<">1000000"; return 0; } } cout<<ans; return 0; } ``` 边输入边判断,不需要数组。
by keep_shining @ 2024-05-10 21:08:54


楼上正解,需要在输入后再声明变量
by shimucheng @ 2024-05-10 21:11:27


@[Terrible](/user/195942) 谢谢帮助
by cjcjcjminecraft @ 2024-05-11 18:23:45


感谢各位大佬
by cjcjcjminecraft @ 2024-05-11 18:35:02


~~受徒儿一拜~~
by cjcjcjminecraft @ 2024-05-11 18:51:34


| 下一页