15 条题解
-
4
-
2
QWQ 我不知道,我哪只眼睛把这题看成高精了
“简短”的 AC 代码( 3ms ):
#include <iostream> using namespace std; struct QWQ{ //定义结构体 QWQ int s[5005]; //s[0] = len //字符串存数 //结构体里可以放函数 void read(){ //读入高精数函数 string in; cin >> in; s[0] = in.size(); for(int i = 1;i <= s[0];i++) s[i] = in[s[0] - i] - '0'; //把char 转换为 int 比如说 '5' - '0' = 5 } void print(string end = ""){ //输出高精数 for(int i = s[0];i >= 1;i--) //一位一位输出即可 cout << s[i]; cout << end; } bool operator <= (long long b){ //重载比较运算符 <= QWQ t; t = b; if(s[0] == t.s[0]){ for(int i = s[0];i >= 1;i--) if(s[i] != t.s[i]) return (s[i] < t.s[i]); } else return (s[0] < t.s[0]); return true; } bool operator == (QWQ b){ //重载比较运算符 == //一位一位比较即可,s[1] 是最高位,s[s[0]] 是最低位 if(s[0] != b.s[0]) return false; for(int i = 1;i <= b.s[0];i++) if(s[i] != b.s[i]) return false; return true; } QWQ operator = (QWQ b){ //重载赋值 = ,但似乎不需要 for(int i = 0;i <= b.s[0];i++) s[i] = b.s[i]; return *this; } QWQ operator = (long long b){ //重载赋值 = if(b == 0){ //0需要特判 s[0] = 1; s[1] = 0; return *this; } long long awa = b , len = 0; while(awa){ s[++len] = awa % 10; awa /= 10; } s[0] = len; return *this; } void operator += (long long b){ //重载 += //把 b 加到高精数的最高位(s[1]),然后进位 s[0]++; //这个地方只适用与 b 较小的情况下 s[1] += b; int x = 0; for(int i = 1;i <= s[0];i++){ s[i] += x; x = s[i] / 10; s[i] %= 10; } while(s[s[0]] == 0 && s[0] > 1) s[0]--; } QWQ operator % (long long b){ //重载 % //大数取余 15 % 2 = (10 % 2 + 5 % 2) % 2 long long rrr = 0; for(int i = 1;i <= s[0];i++) rrr = (rrr * 10 + s[i] - '0') % b; QWQ r; r = rrr; return r; } //重载完后就可以像int 一样进行模拟了 }; int main(void){ cin.tie(0); //输入优化 cout.tie(0); QWQ x , qwq; //声明高精数 qwq = 0; x.read(); //读入 while(x <= 100){ //按照题目意思开始模拟 x += 2; if(x % 3 == qwq) x += 3; } x.print("\n"); //输出 }
- 1
信息
- ID
- 1336
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 420
- 已通过
- 282
- 上传者