29 条题解
-
37
这题主要考察int数据范围和long long 的数据范围
数据类型直接定义成long long 就可以啦!
int main() { long long a,b; return 0; }
请看下图,因为题目$a,b$的范围到了$10^{8}$,$10^8*10^8$最多可能是$10^{16}$导致超出了int的存储范围,因此我们需要改为 long long,注意long之间有空格。
或者就使用level4学习的字符串来处理这个问题
今后做题务必关注数据范围,如果超过就超过了int,需要用long long,当然long long也只能使用不超过约左右的,如需更大的范围可以使用字符串或者高精度算法或者使用python
基础数据类型的大小
常见数据类型
数据类型名 内容(一般情况) 占用内存大小 能储存的范围 scanf
/printf
标识符(g++)int
/signed
32 位整数 4 Bytes 约 %d
/%d
long long
64 位整数 8 Bytes 约 %lld
/%lld
char
字符 1 Byte 至少能储存
常见范围为%c
/%c
float
单精度浮点数 4 Bytes
有效数字 位%f
/%f
double
双精度浮点数 8 Bytes
有效数字 位$%lf
/%f
无符号整型
数据类型名 内容(一般情况) 占用内存大小 能储存的范围 scanf
/printf
标识符(g++)unsigned int
无符号 32 位整数 4 Bytes
约%u
/%u
unsigned long long
无符号 64 位整数 8 Bytes
约%llu
/%llu
-
32
我刚进入题解,刚想写,就看见了MOD的长篇大论,我很佩服他呀,牛牛牛,好了,这题的思路也总结好了,如下(以后重复的点我就不多说了哈,比如保留小数位数)
- 因为这次的 a 和 b 的值比较大所以我们需要用 long long 的形式来存储变量
- 然后就是输出啦,讲 a * b 输出即可,因为 long long 形式乘上 long long 形式还是 long long 形式
好了,上代码吧!(最短)
#include <bits/stdc++.h> using namespace std; int main() { long long a, b; cin >> a >> b; cout << a * b; return 0; }
-
0
#include<bits/stdc++.h> #define N 200005 using namespace std; long long i=0,j=0; void app(){ string str1,str2; int a[N]={0},b[N]={0},c[N*2]={0},len1,len2,len3; cin >> str1 >> str2; len1= str1.size(); len2= str2.size(); len3= len1+len2; for(i=0;i<len1;i++) a[len1-i-1] = str1[i]-'0'; for(i=0;i<len2;i++) b[len2-i-1] = str2[i]-'0'; for(i=0;i<len1;i++){ for(j=0;j<len2;j++) c[i+j]+=a[i]*b[j]; } int x=0; for(i=0;i<len3;i++) c[i]=c[i]+x,x=c[i]/10,c[i]=c[i]%10; while(c[len3]==0&&len3>0) len3--; for(int i=len3;i>=0;i--) printf("%d",c[i]); return ; } int main(){ app(); return 0; }
信息
- ID
- 1795
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 3087
- 已通过
- 1747
- 上传者