模拟,贪心(update)

void Solve()
{
    cin>>n;
    map<int,int>mp;
    for(int i=0;i<n;++i)
    {
        string m;
        cin>>m;
        int t=mod(m);
        mp[t]++;
    }
    cout<<mp[0]/2+min(mp[1],mp[2])<<endl;
}

模拟mod3,找出能mod3的幸运数字,cout<<mp[0]/2+min(mp[1],mp[2])<<endl;就可以了


给兄弟上四道水题模拟(模拟加减乘除);

这里把所有的数据域扩大

 


下面给兄弟们AC代码,这个可以作为模板!!! 

1.模拟加法:

//模拟加法
#include<bits/stdc++.h>
using namespace std;
void Solve (){
    string  n,m,str;
    cin>>n>>m;
    int t=0;
    int len1=n.length(),len2=m.length();
    for(int i=len1-1,j=len2-1;i>=0||j>=0||t>0;--j,--i){
        if(i>=0)t+=n[i]-'0';
        if(j>=0)t+=m[j]-'0';
        str+=((t%10)+'0');
        t/=10;
    }
    reverse(str.begin(),str.end());
    cout<<str<<endl;
}
signed main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Solve();
}

 2.模拟减法:

Frist:用vector模拟,存入数字,之后输出数字;


#include <iostream>
#include <vector>
using namespace std;
const int N=1000010;
bool cmp(vector<int>&A,vector<int>&B)//判断A是否比B大
{
    if (A.size()!=B.size()) return A.size()>B.size();//基础长度比较
    for (int i=A.size()-1;i>=0;i--) 
        if (A[i]!=B[i])
            return A[i]>B[i];    //每个数为值比较
    return true;
}
vector<int>sub(vector<int>&A,vector<int>&B)
{
    vector<int>C;//保存答案
    int t=0;
    for(int i=0;i<A.size();i++)
    {
        t=A[i]-t;//减去借位
        if (i<B.size())t-=B[i];
        C.push_back((t+10)%10);//加上借位
        if(t<0)t=1;
        else t=0;
    }
    //去前导零

 //while (C.back()==0&&C.size()>1)C.pop_back();
 for(int i=C.size()-1;i>=0;i--)
 if(C.back()!=0)break;
 else if(!C.back())C.pop_back();
 if(C.size()==0)C.push_back(0);
    return C;
}

int main()
{
    string a,b;
    cin>>a>>b;
    vector<int>A,B,C;
    for (int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//要从低位减起
    for (int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    if (cmp(A,B))C=sub(A,B);
    else {
        C = sub(B, A);
        cout<<'-';
    }//若B比A大,将A-B变为B-A,加上负号
    for (int i=C.size()-1;i>=0;i--) cout<<C[i];//倒序输出
    return 0;
}

Second:用string直接模拟 cout<<str;​​​​​​​

#include<bits/stdc++.h>
using namespace std;
bool cmp(string &a,string &b){
    if(a.size()!=b.size())return a.size()>b.size();
    for(int i=0;i<a.size();++i){
        if(a[i]!=b[i])return a[i]>b[i];
    }
    return true;
}
string sub(string &a,string &b){
    string str;
    int t=0;
    int len1=a.length(),len2=b.length();
    for(int i=len1-1,j=len2-1;i>=0||j>=0;--j,--i){
        if(i>=0)t+=a[i]-'0';
        if(j>=0)t-=b[j]-'0';
        if(t<0)str+=((t+10)%10)+'0',t=-1;
        else str+=t+'0',t=0;
    }
    int len=str.size();
    for(int i=len-1;i>=0;--i){
        if(str[i]=='0')str.pop_back();
        else break;
    }
    if(str.empty())str+='0';
    reverse(str.begin(),str.end());
    return str;
}
void Solve (){
    string  n,m,str;
    cin>>n>>m;
    int t=0,flag=1;
    int len1=n.length(),len2=m.length();
    if(cmp(n,m))str=sub(n,m);
    else str='-'+sub(m,n);
    cout<<str;
}
signed main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Solve();
}

3.模拟乘法

   高精度*高精度

#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
#include <vector>
#include<string>
#include<cstring>
#include<numeric>
#include<queue>
#include <bits/stdc++.h>
#define endl '\n'
#define inf 0x3f3f3f3f
#define inf_max 0x7f7f7f7f
typedef long long ll;
#include<bits/stdc++.h>
using namespace std;
vector<int> mul(vector<int> &a,vector<int> &b){
    vector<int>c(a.size()+b.size()+100,0);
    int t=0,len1=a.size(),len2=b.size();
    for(int i=0;i<len1;++i){
        for(int j=0;j<len2;++j){
            c[i+j]+=a[i]*b[j];
        }
    }
    int len3=c.size();
    for(int i=0;i<len3;++i){
        t+=c[i];
        c[i]=t%10;
        t/=10;
    }
    while(c.back()==0&&c.size()>1)c.pop_back();
    //reverse(c.begin(),c.end());
    return c;
}
void Solve (){
    string a,b;
    cin>>a>>b;
    vector<int>arr,brr;
    int len1=a.size(),len2=b.size();
    for(int i=len1-1;i>=0;--i)arr.push_back(a[i]-'0');
    for(int i=len2-1;i>=0;--i)brr.push_back(b[i]-'0');
    auto c=mul(arr,brr);
    for(auto  i:c)cout<<i;

}
signed main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Solve();
}

 更新:大数相加A+B和大数相乘A*B通用模板 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> add(vector<int> A, vector<int> B) {
    // A: 4 3 2 1
    // B: 6 5
    vector<int> C(max(A.size(), B.size()) + 7, 0);  // 数组C开大一点没事,反正可以去前导零的
    for (int i = 0; i < A.size(); i ++) C[i] += A[i];
    for (int i = 0; i < B.size(); i ++) C[i] += B[i];

    // 处理进位
    for (int i = 0; i + 1 < C.size(); i ++) {
        C[i + 1] += C[i] / 10;
        C[i] %= 10;
    }

    // 处理前导零
    while (C.size() > 1 && C.back() == 0) C.pop_back();

    reverse(C.begin(), C.end());
    return C;
}

vector<int> mul(vector<int> A, vector<int> B) {
    // A: 4 3 2 1
    // B: 6 5
    vector<int> C(A.size() + B.size() + 7, 0);  // 数组C开大一点没事,反正可以去前导零的
    for (int i = 0; i < A.size(); i ++) {
        for (int j = 0; j < B.size(); j ++) {
            C[i + j] += A[i] * B[j];
        }
    }

    // 处理进位
    for (int i = 0; i + 1 < C.size(); i ++) {
        C[i + 1] += C[i] / 10;
        C[i] %= 10;
    }

    // 处理前导零 "0000" 去掉前导零
    while (C.size() > 1 && C.back() == 0) C.pop_back();

    reverse(C.begin(), C.end());
    return C;
}

int main() {
    string s1 = "9899", s2 = "100";

    vector<int> A, B;
    for (int i = s1.size() - 1; i >= 0; i --) A.push_back(s1[i] - '0');
    for (int i = s2.size() - 1; i >= 0; i --) B.push_back(s2[i] - '0');

    vector<int> C = add(A, B);
    cout << s1 << "+" << s2 << "=";
    for (int i = 0; i < C.size(); i ++) cout << C[i];
    cout << endl;

    C = mul(A, B);
    cout << s1 << "*" << s2 << "=";
    for (int i = 0; i < C.size(); i ++) cout << C[i];
    cout << endl;

    return 0;
}

 

 

4.模拟除法

#include<bits/stdc++.h>
using namespace std;

vector<int> div(vector<int>& a,int b,int &t){
    int len1=a.size();
    vector<int>c;
    for(int i=0;i<len1;++i){
        t=t*10+a[i];
        c.push_back(t/b);
        t=t%b;
    }
    reverse(c.begin(),c.end());
    while(c.back()==0&&c.size()>1)c.pop_back();
    reverse(c.begin(),c.end());
    return c;
}
void Solve (){
    string a;int b,t=0;
    cin>>a>>b;
    vector<int>arr;
    int len=a.size();
    for(int i=0;i<len;++i)arr.push_back(a[i]-'0');
    auto c=div(arr,b,t);
    for(auto i:c)cout<<i;
    cout<<endl<<t;
}
signed main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Solve();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值