陈阿水


私信TA

用户名:cas52012

访问量:12042

签 名:

MADAO

等  级
排  名 1815
经  验 2620
参赛次数 0
文章发表 10
年  龄 27
在职情况 待业
学  校 海南大学
专  业

  自我简介:

今天的动漫还没看!

解题思路:
指数叠加的大整数运算。




注意事项:

题目上说的n<10100这一句应该是打错了,。我把程序查来查去查不出错。后来把输入的int改成字符串,设了200位,就通过了。


参考代码:

#include<stdio.h>
#include<string.h>
int xx(char *a,char *b,char *c)
{
    int i,j,t=0,k;
    for(i=0;b[i]!=NULL&&i<100;i++)
    {
        for(j=0;a[j]!=NULL&&j<100;j++)
        {
            if(i+j<100)
            {
                if(c[j+i]==NULL)
                {
                    c[j+i]='0';
                    if(j+i+1<=100)
                        c[j+i+1]=NULL;
                }
                t=(c[j+i]-'0')+(a[j]-'0')*(b[i]-'0');
                c[j+i]=t%10+'0';
                t=t/10;
                k=j+i+1;
                while(t!=0&&k<100)
                {
                    if(c[k]==NULL)
                    {
                        c[k]='0';
                        c[k+1]=NULL;
                    }
                    t=t+(c[k]-'0');
                    c[k]=t%10+'0';
                    t=t/10;
                    k++;
                }
            }
        }
    }
    return 0;
}
int add(char *m,char *nm)
{
    int i,t=0,k;
    for(i=0;i<200;i++)
    {
        if(m[i]==NULL&&nm[i]==NULL)
            break;
        else if(m[i]==NULL)
        {
            m[i]='0';
            m[i+1]=NULL;
        }
        else if(nm[i]==NULL)
        {
            nm[i]='0';
            nm[i+1]=NULL;
        }
        t=(m[i]-'0')+(nm[i]-'0');
        m[i]=t%10+'0';
        t=t/10;
        k=i;
        while(t!=0)
        {
            k++;
            if(m[k]==NULL)
            {
                m[k]='0';
                m[k+1]=NULL;
            }
            t=m[k]-'0'+t;
            m[k]=t%10+'0';
            t=t/10;
        }
    }
}
int main()
{
//    long int bug=0;
    int a,b,i,j,p=0,end=0,w=0;
    char n[102],t[102],c[102],tempm[102],tempnm[102],mast[102],m[200],nm[200];
    char check[200];

    scanf("%s",check);                //找了好久终于找到了错的地方,,,原来输入问题。
    scanf("%d",&b);
    j=0;
    for(i=(int)strlen(check)-1;i>=0&&j<=100;i--)
    {
        n[j]=check[i];
        j++;
    }
    n[j]=NULL;
//这里是原本的整型输入
//    scanf("%d %d",&a,&b);                
    m[0]='0';
    m[1]=NULL;
    nm[0]='1';
    nm[1]=NULL;

    /*
    for(i=0;i<b;i++)
    {
        n[i]=a%10+'0';
        a=a/10;
    }
    n[i]=NULL;
  */
    strcpy(mast,n);
    strcpy(t,n);
    tempm[0]='1';
    tempm[1]=NULL;
    for(i=1;i<=b;i++)
    {
        tempnm[0]=NULL;
        c[0]=NULL;
        xx(n,t,c);
        xx(tempm,t,tempnm);
        tempnm[b+1]=NULL;
        c[b]=NULL;
        add(m,nm);
        p=0;
        for(j=w;j<b;j++)
        {
            if(c[j]!=mast[j])
            {
                i=w;
                break;
            }
            else
            {
                p=1;
                w++;
            }
        }
        if(p==1)
        {
            strcpy(nm,m);
            if(w==b)
            {
                for(i=(int)strlen(m)-1;i>=0;i--)
                {
                    printf("%c",m[i]);
                //    bug=bug*10+(m[i]-'0');
                }
            //    printf("%ld",bug);
                return 0;
            }
            strcpy(t,tempnm);
        }
        strcpy(tempm,tempnm);
        strcpy(n,c);
        end++;
        if(end==100000)
        {
            break;
        }
    }
    printf("-1");
    return 0;
}

 

0.0分

15 人评分

  评论区

#include<stdio.h>
#include<math.h>
int main()
{
    //求32的正整数幂的最后2位循环长度
	int n,k,L=1,p=0,sum=0,sum1,sum2,num = 1,a[1000000];
	scanf("%d%d",&n,&k);
	p = n;
	for(int i=0;i<10;i++){
	    a[i] = n;
	    n = n*p;
	}
	for(int z=0;z<k;z++){
	    L = L*10;
	}
	sum = a[0];
	for(int j=1;j<1000000;j++)
	{
	    if(j>100000){
	        num = -1;
	        break;
	    }
	    if(sum == a[j]%L)
	    {
	        break;
	    }else{
	        num++;
	    }
	}
	printf("%d\n",num);
}
32分 运行错误
2024-03-02 16:30:43
各路大神,可否看看我这个哪里出错了
#include<stdio.h>
int main()
{
	int n,k,a=0,i,c=1;
	scanf("%d%d",&n,&k);
	a=n;
	for(i=1;i<=k;i++)
	c=c*10;
	for(i=1;i<10000;i++)
	{
		n*=a;
	    n=n%c;
		if(a==n)break;
	}
	if(a!=n)
	printf("-1");
	else
	printf("%d",i);
 }
2022-01-17 14:51:02
#include<stdio.h>
#include<math.h>
void main()
{
	int num,n;
	int i,l,x=1,w[10000];

	scanf("%d%d",&num,&n);
	if(num<pow(10,n-1))
		printf("-1\n");
	else
	{
		for(i=1;i<=10000;i++)
		{
			x*=num;
			w[i]=x%(int)pow(10,n);
			if(x>pow(10,n))
				x=w[i];
		//	printf("i=%d,x=%d,w[%d]=%d\n",i,x,i,w[i]);
		}
			for(l=1;l<i;l++)
			{
				if(w[1]==w[1+l]&&w[1+l]==w[1+2*l])
				{
					printf("%d\n",l);
					break;
				}
			}
	}
}
看看错在何处?总是提示运行错误
2020-12-29 09:49:25
看起来不是那么的那么的美观;
2018-03-07 18:26:27
  • «
  • 1
  • »