首页 > 其他分享 >模拟与高精度题解

模拟与高精度题解

时间:2022-11-10 23:35:05浏览次数:52  
标签:cout 高精度 int 题解 t2 -- 模拟 105

此题目特征为储存数字超过long long类型,c++无法用一个变量存储全部数字

解法为开数组来储存各个位上的数字

1.字符高精度

直接以两种方式处理字符即可

#include<bits/stdc++.h>
using namespace std;
char a[1000000];
int main(void) 
{
    int n=0,t1=0,t2=0;
        //输入
    while(cin>>a[n])
    {
        if(a[n]=='E')break;
        n++;
    }
        //计算11分制
    for(int i=0;i<n;i++)
    {
        if(a[i]=='W')t1++;
        else if(a[i]=='L')t2++;
        if((t1>=11||t2>=11)&&(t1-t2>=2||t2-t1>=2))
        {
            cout<<t1<<":"<<t2;
            cout<<endl;
            t1=0;t2=0;
        }
    }
        //计算21分制
    if(t1!=0||t2!=0)cout<<t1<<":"<<t2<<endl;
    cout<<endl;
    t1=0;t2=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]=='W')t1++;
        else if(a[i]=='L')t2++;
        
        if((t1>=21||t2>=21)&&(t1-t2>=2||t2-t1>=2))
        {
            cout<<t1<<":"<<t2;
            cout<<endl;
            t1=0;t2=0;
        }
    }
    if(t1!=0||t2!=0)cout<<t1<<":"<<t2;
    return 0;
}

2.高精度加法

 

 

 开两个数组后各位相加再进位即可

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    int n1=0,n2=0,n,a[105]={0},b[105]={0},c[105]={0},in;
    char win1[105]={'a'},win2[105]={'a'};
    cin>>win1;
    for(int i=100,j=0;i>=0;i--)
    {
        if(win1[i]>=48&&win1[i]<=57)
        {
            a[j]=win1[i]-48;
            n1++;
            j++;
        }
    }
    cin>>win2;
    for(int i=100,j=0;i>=0;i--)
    {
        if(win2[i]>=48&&win2[i]<=57)
        {
            b[j]=win2[i]-48;
            n2++;
            j++;
        }
    }

    if(n1>n2)n=n1;
    else n=n2;
    for(int i=0;i<=n+1;i++)
    {
        c[i]=a[i]+b[i];
        if(c[i]>=10)
        {
            a[i+1]++;
            c[i]-=10;
        }
    }
    int start=0;
    for(int i=n;i>=0;i--)
    {
        if(c[i]!=0)
        {
            cout<<c[i];
            start=1;
            continue;
        }
        else if(start==0&&c[i]==0)
        {
            start=1;
            continue;
        }
        cout<<c[i];
    }
    cout<<endl;
    return 0;
}

3.高精度乘法

 

该题虽然为累加,但考虑到减少计算量,直接用高斯求和公式

关键为两高精度的乘积如何计算

据观察可知,乘法可一这样计算

 

 

 即一个高精度的每一位与另一高精度的每一位相乘后存储在一个新的高精度中,最后进位

 

#include<bits/stdc++.h>
using namespace std;
char win[105];
int main(void)
{
    int n=0,a[105]={0},c[205]={0};
    cin>>win;
    //逆序输入
    for(int i=100,j=0;i>=0;i--)
    {
        if(win[i]>=48&&win[i]<=57)
        {
            a[j]=win[i]-48;
            n++;
            j++;
        }
    }
    //得平方 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            c[j+i]+=a[i]*a[j];;
        }
    }
    //得到n(n+1) 
    for(int i=0;i<n;i++)
    {
        c[i]+=a[i];
    }
    //除2 
    for(int i=2*n-2;i>=1;i--)
    {
        c[i-1]+=c[i]%2*10;
        c[i]-=(c[i]%2);
        c[i]/=2;
    }
    if(c[0]%2==1)c[0]=(c[0]+1)/2;
    else c[0]/=2;
    //进位
    for(int i=0;i<2*n-1;i++)
    {
        if(c[i]>10)c[i+1]+=c[i]/10;
        c[i]=c[i]%10;
    }
    //输出c
    int start=0;
    if(win[0]=='0')cout<<"0";
    else 
    {
        for(int i=200;i>=0;i--)
        {
            if(c[i]!=0)
            {
                start=i;
                break;
            }
        }
        for(;start>=0;start--)
        {
            cout<<c[start];
        }
    }
    return 0;
}

 

标签:cout,高精度,int,题解,t2,--,模拟,105
From: https://www.cnblogs.com/if-I-can-fly/p/16879207.html

相关文章

  • Android基于坐标对View进行模拟点击事件
    在Android中,我们对于View进行模拟点击事件,很容易,比如调用​​View.performClick​​即可。但是有些时候,我们想要更加精细的点击,比如View的某一区域或者某一点进行点击。比如......
  • 小姿势 之 Android Studio 3.5 Retry 问题解决
    总会有那么一个人,让你觉得这个世界一切都是值得的。纵使结果不尽人意,曾经拥有即是最好。前言家里的MBP静静地躺了一段时间,某天心血来潮想嗨起来,其实就是瞎折腾一把,结果......
  • 洛谷 P4423 [BJWC2011]最小三角形 题解
    求平面最近点对的时候有这样一种思路:将所有点全部绕原点旋转同一个角度,然后按横坐标排序。根据数学直觉,在随机旋转后,答案中的两个点在数组中肯定不会离得太远。把这种......
  • P4407 [JSOI2009] 电子字典 题解
    题目:P4407这题差不多就是P1688的改版。参考一下我在P1688的做法,我们继续使用Hash,然后只要考虑如何去重就好了。于是就有了这个暴力的想法:#代表修改,@代表添加,$代......
  • [AGC040F] Two Pieces 题解
    linkSolution这个题真的挺难的。/kk看了一个下午的题解才搞懂。/fn我们发现我们如果设状态\((x,d)\)表示前面的一个点在\(x\),另一个在\(x-d\),那么三种操作相当于:......
  • 题解 P3974【[TJOI2015]组合数学】
    postedon2022-10-2814:11:41|under题解|sourceproblem给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走。问至少走多少次才能将财宝捡完。此对......
  • 记一次HTTPClient模拟登录获取Cookie的开发历程
    记一次HTTPClient模拟登录获取Cookie的开发历程环境:​ springboot:2.7​ jdk: 1.8​ httpClient:4.5.13设计方案​ 通过新建一个空的cookie库创建出一个Http客户......
  • 【题解】【切开字符串】
    P8631[蓝桥杯2015国AC]切开字符串Sol首先问题可以转化为对每个前缀求出本质不同奇回文子串数,和对每个后缀求出本质不同子串数和本质不同奇回文子串数。本质不同子......
  • simpread-(127 条消息) fastAPI 中的跨域问题解决_小童同学_的博客 - CSDN 博客_fasta
    本文由简悦SimpRead转码,原文地址blog.csdn.netCrossOrigin前言前端采用Vue,后端采用fastAPI的CV项目在开发时遇到跨域问题,记录学习过程与解决方案。概念C......
  • 体验 Python 剪辑视频以及相关问题解决, 一劳永逸!
    前言对于使用Python对视频进行剪辑我们最常用的就是Moviepy,我之前也写过一篇​​《必杀技--使用FFmpeg命令快速精准剪切视频》​​,这篇文章单纯使用的是FFmpeg,他是通过......