听峰问雨 听峰问雨
首页
导航站
  • 编程语言

    • Python
  • 数据结构与算法
  • 设计模式
  • UVA
  • LeetCode
  • 《Go语言实战》
  • 《Go Web编程》
  • 《算法精粹 经典计算机科学问题的Python实现》
  • 学习
  • 博客搭建
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
GitHub (opens new window)

zfprotectors

默默学习er
首页
导航站
  • 编程语言

    • Python
  • 数据结构与算法
  • 设计模式
  • UVA
  • LeetCode
  • 《Go语言实战》
  • 《Go Web编程》
  • 《算法精粹 经典计算机科学问题的Python实现》
  • 学习
  • 博客搭建
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
GitHub (opens new window)
  • UVA

    • UVA340 - Master-Mind Hints
    • UVA401 - Palindromes
    • UVA409 - Excuses, Excuses!
    • UVA414 - Machined Surfaces
    • UVA424 - Integer Inquiry
    • UVA445 - Marvelous Mazes
    • UVA457 - Linear Cellular Automata
    • UVA458 - The Decoder
    • UVA465 - Overflow
    • UVA488 - Triangle Wave
    • UVA489 - Hangman Judge
    • UVA490 - Rotating Sentences
    • UVA494 - Kindergarten Counting Game
    • UVA537 - Artificial Intelligence?
    • UVA644 - Immediate Decodability
    • UVA694 - The Collatz Sequence
    • UVA748 - Exponentiation
    • UVA10010 - Where's Waldorf?
    • UVA10055 - Hashmat the Brave Warrior
    • UVA10071 - Back to High School Physics
    • UVA10106 - Product
    • UVA10115 - Automatic Editing
    • UVA10250 - The Other Two Trees
    • UVA10300 - Ecological Premium
    • UVA10361 - Automatic Poetry
    • UVA10420 - List of Conquests
    • UVA10494 - If We Were a Child Again
      • 问题描述
      • 思路
      • 代码
    • UVA10815 - Andy's First Dictionary
    • UVA10878 - Decode the tape
  • LeetCode

  • ACM
  • UVA
zfprotectors
2022-05-18
目录

UVA10494 - If We Were a Child Again

# 问题描述

输入两个数求余和求模的结果

# 思路

套用大数模板。。

# 代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=1000;
struct bign
{
    int len,s[maxn];
    bign()
    {
        memset(s,0,sizeof(s));
        len=1;
    }
    bign(int num)
    {
        *this=num;
    }
    bign(const char *num)
    {
        *this=num;
    }
    bign operator = (const int num)
    {
        char s[maxn];
        sprintf(s,"%d",num);
        *this=s;
        return *this;
    }
    bign operator = (const char *num)
    {
        len=strlen(num);
        for(int i=0;i<len;i++)
            s[i]=num[len-i-1]-'0';
        return *this;
    }
    //输出
    string str() const
    {
        string res="";
        for(int i=0;i<len;i++)
        {
            res=(char)(s[i]+'0')+res;
        }
        if(res=="")
            res="0";
        return res;
    }
    void clean()
    {
        while(len>1&&!s[len-1])
            len--;
    }
    bign operator + (const bign &b) const
    {
        bign c;
        c.len=0;
        for(int i=0,g=0;g||i<max(len,b.len);i++)
        {
            int x=g;
            if(i<len) x+=s[i];
            if(i<b.len) x+=b.s[i];
            c.s[c.len++]=x%10;
            g=x/10;
        }
        return c;
    }
    bign operator - (const bign& b) const
    {
        bign c;
        c.len=0;
        for(int i=0,g=0;i<len;i++)
        {
            int x=s[i]-g;
            if(i<b.len) x-=b.s[i];
            if(x>=0)
                g=0;
            else
            {
                g=1;
                x+=10;
            }
            c.s[c.len++]=x;
        }
        c.clean();
        return c;
    }
    bign operator * (const bign& b) const
    {
        bign c;
        c.len=len+b.len;
        for(int i=0;i<len;i++)
        {
            for(int j=0;j<b.len;j++)
                c.s[i+j]+=s[i]*b.s[j];
        }
        for(int i=0;i<c.len-1;i++)
        {
            c.s[i+1]+=c.s[i]/10;
            c.s[i]%=10;
        }
        c.clean();
        return c;
    }
    bign operator / (const bign &b)const
    {
        bign ret,cur=0;
        ret.len=len;
        for(int i=len-1;i>=0;i--)
        {
            cur=cur*10;
            cur.s[0]=s[i];
            while(cur>=b)
            {
                cur-=b;
                ret.s[i]++;
            }
        }
        ret.clean();
        return ret;
    }
    bign operator %(const bign &b) const
    {
        bign c=*this/b;
        return *this-c*b;
    }
    bool operator <(const bign& b) const
    {
        if(len!=b.len) return len<b.len;
        for(int i=len-1;i>=0;i--)
            if(s[i]!=b.s[i])
                return s[i]<b.s[i];
        return false;
    }
    bool operator >(const bign& b) const
    {
        return b < *this;
    }
    bool operator <=(const bign& b) const
    {
        return !(b < *this);
    }
    bool operator >=(const bign& b) const
    {
        return !(*this <b);
    }
    bool operator ==(const bign& b) const
    {
        return !(b< *this)&&!(*this<b);
    }
    bool operator !=(const bign& b) const
    {
        return *this >b || *this <b;
    }
    bign operator +=(const bign& b)
    {
        *this= *this + b;
        return *this;
    }
    bign operator -=(const bign& b)
    {
        *this= *this - b;
        return *this;
    }
    bign operator *=(const bign& b)
    {
        *this= *this * b;
        return *this;
    }
    bign operator /=(const bign& b)
    {
        *this= *this / b;
        return *this;
    }
    bign operator %=(const bign& b)
    {
        *this= *this % b;
        return *this;
    }
};

istream& operator >> (istream &in, bign& x)
{
    string s;
    in >> s;
    x = s.c_str();
    return in;
}

ostream& operator << (ostream &out, const bign& x)
{
    out << x.str();
    return out;
}

int main()
{
    bign a,b;
    string s;
    while(cin>>a>>s>>b)
    {
       a.clean();   //考虑清除前导0
       b.clean();
        if(s=="/")
            cout<<a/b<<endl;
        else
            cout<<a%b<<endl;
    }
    return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
编辑 (opens new window)
#ACM#C++#UVA
上次更新: 2022/05/18, 19:03:08
UVA10420 - List of Conquests
UVA10815 - Andy's First Dictionary

← UVA10420 - List of Conquests UVA10815 - Andy's First Dictionary→

最近更新
01
LeetCode88 - 合并两个有序数组
06-22
02
LeetCode1 - 两数之和
06-22
03
LeetCode1603 - 设计停车系统
06-21
更多文章>
Theme by Vdoing | Copyright © 2021-2022 zfprotectors | 闽ICP备2021014222号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式