洛谷算法1-1,高精度

P1042 [NOIP2003 普及组] 乒乓球
思路:简单模拟题
这里的“模拟”不是指模拟某场比赛的模拟题,而是指让程序完整的按照题目叙述的方式执行运行得到最终答案。同时也会介绍可以计算很大整数的高精度运算方法。这一章对思维与算法设计的要求不高,但是会考验编程的基本功是否扎实。

#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
	int a[62501];//这个用来测记录赢还是输,赢为1,输为0。
				//25*2500=62500
	int cnt=0;
	int i,j;
	char s[25];
	while(i++){//一直输入字符串一直到某个字符串里出现'E' 
		scanf("%s",s);//输入 
		for( j=0; j<strlen(s);j++){
			if( s[j]=='W'){ //如果W华华得一分 
				a[cnt]=1;//cnt表示对局次数,值表示胜利者,1为华华0为对手胜利 
			}else if( s[j]=='L'){
				a[cnt]=0;
			}else if( s[j]=='E'){
				break; 
			}
			cnt++;
		}
		if( s[j]=='E') break;
	}
	int az=0,bz=0;
	//11分制
	for(i=0;i<cnt;i++){
		if(a[i]==1) az++;
		else if(a[i]==0) bz++;
		if((az>=11||bz>=11)&&fabs(az-bz)>=2){//这个是最值得注意的,思考一下
			printf("%d:%d\n",az,bz);
			az=0;bz=0;
		}
	}
		printf("%d:%d\n",az,bz);
	//22分制
	printf("\n");
	az=0;bz=0;
	 for(i=0;i<cnt;i++){
		if(a[i]==1) az++;
		else if(a[i]==0) bz++;
		if((az>=21||bz>=21)&&fabs(az-bz)>=2){
			printf("%d:%d\n",az,bz);
			az=0;bz=0;
		}
	}
		printf("%d:%d\n",az,bz);

	return 0;
}

2-扫雷

#include<stdio.h>
#include<string.h>
int main()
{
    char a[101][101];
    int n,m;
    int sum;
    scanf("%d%d",&n,&m);
    // printf("%d%d\n",n,m);
    for(int i=0; i<n; i++)
    {
        scanf("%s",&a[i]);
    }
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            sum=0;
            if(a[i][j]=='?')
                {
                for(int k=i-1; k<=i+1; k++)
                    for(int l=j-1; l<=j+1; l++)
                    {
                        if(a[k][l]=='*')
                            sum++;
                    }
                    a[i][j]=sum+'0';
            }
        }
    }
         for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            printf("%c",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

3-P1563 [NOIP2016 提高组] 玩具谜题
0^ 0=1^ 1=0;
0^ 1=1^0=1

#include<stdio.h>
int main()
{
    char a[100001];
    long n,m,i,sum=0,x,y;
    char b[100000][11];
    scanf("%ld%ld",&n,&m);
    for(i=0;i<n;i++)
    {
        scanf("%ld%s",&a[i],b[i]);
    }
    for(i=0;i<m;i++)
    {
        scanf("%ld%ld",&x,&y);
        if(!a[sum]^x)
        {
            y*=-1;
        }
        sum=(sum+n+y)%n;
    }
    printf("%s",b[sum]);
    return 0;
}

4

#include<stdio.h>
#include<string.h>
int main()
{
    char a[600],b[600];
    int c[600],d[600],e[600];
    scanf("%s",a);
    scanf("%s",b);
    int l1=strlen(a);
    int l2=strlen(b);
    int l=l1>l2?l1:l2;
    //printf("%d",l);

    if(l1<=l2)
    {int ll=0;
        for(int i=0; i<l2-l1; i++)
            c[i]=0;
        for(int j=l2-l1; j<l; j++)
            c[j]=a[ll++]-'0';
        //for(int i=0;i<l;i++)
        // printf("%d",c[i]);
        for(int i=0;i<l2;i++)
        d[i]=b[i]-'0';
             //for(int i=0;i<l;i++)
         //printf("%d",d[i]);
        int n=0;
        for(int i=l-1;i>=0;i--)
        {
            e[i]=c[i]+d[i]+n;
            n=e[i]/10;
            e[i]=e[i]%10;
        }
        if(n==1)
            printf("1");
        for(int i=0;i<l;i++)
            printf("%d",e[i]);

    }
    if(l1>l2)
    {
        int ll=0;
        for(int i=0; i<l1-l2; i++)
            c[i]=0;
        for(int j=l1-l2; j<l; j++)
            c[j]=b[ll++]-'0';
        //for(int i=0;i<l;i++)
        // printf("%d",c[i]);
        for(int i=0;i<l1;i++)
        d[i]=a[i]-'0';
             for(int i=0;i<l;i++)
         printf("%d",d[i]);
        int n=0;
        for(int i=l-1;i>=0;i--)
        {
            e[i]=c[i]+d[i]+n;
            n=e[i]/10;
            e[i]=e[i]%10;
        }
        if(n==1)
        {
            printf("1");
        }
        for(int i=0;i<l;i++)
            printf("%d",e[i]);
    }

    return 0;
}

5.A*B

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a1[10001],b1[10001];
int a[10001],b[10001],i,x,len,j,c[10001];
int main ()
{
    scanf("%s",a1);
    scanf("%s",b1);
    int lena=strlen(a1);
	int lenb=strlen(b1);
    for(i=1;i<=lena;i++)
    a[i]=a1[lena-i]-'0';
    for(i=1;i<=lenb;i++)
    b[i]=b1[lenb-i]-'0';
	for(i=1;i<=lenb;i++)
	for(j=1;j<=lena;j++)
	c[i+j-1]+=a[j]*b[i];
    for(i=1;i<lena+lenb;i++)
	if(c[i]>9)
	{
		c[i+1]+=c[i]/10;
		c[i]%=10;
	}
	len=lena+lenb;
    while(c[len]==0&&len>1)
        len--;
    for(i=len;i>=1;i--)
    printf("%d",c[i]);
    return 0;
}

6阶乘

#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
int a[100000],n,i,y,c[100000],s[100000];
int la,ls,lc;
void add()
{
    int i;
    memset(c,0,sizeof(c));
    lc=fmax(ls,la);
    for (i=1;i<=lc;i++)
    {
        c[i]+=s[i]+a[i];
        c[i+1]=c[i]/10;
        c[i]%=10;
     }
    while (c[lc+1]>0)
        {
            c[lc+2]=c[c[0]+1]/10;
            c[lc+1]%=10;
            lc++;
        }
    ls=lc;//长度也要更新
    for (i=1;i<=lc;i++)
        s[i]=c[i];//将c给s
}
int main()
{

    scanf("%d",&n);
    la=1;
    a[1]=1;
    ls=1;
    s[1]=0;
    for (y=1;y<=n;y++)
    {
        memset(c,0,sizeof(c));
        lc=la;
        for (i=1;i<=la;i++)
        {
          c[i]+=a[i]*y;
          c[i+1]=c[i]/10;
          c[i]%=10;
        }
        ///再进位;
        while(c[lc+1]>0)
        {
            c[lc+2]=c[lc+1]/10;
            c[lc+1]%=10;
            lc++;
        }
    ///更新了求得阶乘的长度
        for (i=1;i<=lc;i++)
            a[i]=c[i];
        la=lc;
        add();
    }
    for (i=ls;i>=1;i--)
    printf("%d",s[i]);
    printf("\n");
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry_Sky_Dream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值