1047找环环&1503整数探究

1047就是判断一个数乘以他的位数1~n后是这个数转来转去的一个形式。主要就是大整数乘法

贴shi代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

//test记录输入的数,back计算乘法之后的数
int test[65];
int back[65];
//判断当前的n,是否构成一个环
int iscyc(int N)
{
    int i,j,k;
    bool eq=1;
    //将test作为一个基础,进行比较
    for(i=0;i<N;i++)
    {
        if(back[i]==test[0])
        {
            //当有一个地方和test[0]相等时,继续往下比较,判断是否是整个串都相等
            //一定要注意这里的每次的初始化!!! 每次找到相同的就先设相等
            eq=1;
            for(j=0;j<N;j++)
            {
                if(back[(i+j)%N]!=test[j])  
                {
                    eq=0;
                    break;
                }
            }
            if(eq) return 1;
        }
    }
    return 0;
}

int main()
{
    string onec;
    int i,j,k,N,resid,value,flag=0,pos;
    while(cin>>onec)
    {
        pos=0;
        memset(test,0,sizeof(test));
        memset(back,0,sizeof(back));
        //还是将输入的string转换成int 数组 倒序
        for(i=onec.size()-1;i>=0;i--)
        {
            back[pos]=onec[i]-'0';
            pos++;
        }

        N=onec.size();
        //计算对应n的乘法之后的值
        resid=0;
        for(i=0;i<N;i++)
        {
            resid=0;
            for(j=0;j<N;j++)
            {
                value=back[j]*(i+1)+resid;
                test[j]=value%10;
                resid=value/10;
            }

            if(0) {int a=1;}
            else{
                flag=iscyc(N);
                //有一个不是,则不是
                if(!flag)
                {
                   cout<<onec<<" is not cyclic"<<endl;
                    break;
                }
            }
        }
        if(flag) cout<<onec<<" is cyclic"<<endl;
    }
    return 0;
}

1503大水 就是大整数加法,直接代码

#include<iostream>
#include<string>
using namespace std;
int num[101];
int sum[10100];

int main()
{
    string onen;
    int i,j,k,pos;
    memset(sum,0,sizeof(sum));
    while(cin>>onen&&onen!="0")
    {
        memset(num,0,sizeof(num));
        pos=0;
        for(i=onen.size()-1;i>=0;i--)
        {
            num[pos]=onen[i]-'0';
            pos++;
        }
        for(i=0;i<pos;i++)
        {
            sum[i]+=num[i];
            if(sum[i]>=10) 
            {
                sum[i+1]++;
                sum[i]=sum[i]%10;
            }
        }
    }
    for(i=10100-1;i>=0;i--) if(sum[i]) break;
    for(j=i;j>=0;j--)
        cout<<sum[j];
    cout<<endl;
    return 0;
}
            

 

posted on 2013-07-26 21:47  soyscut  阅读(152)  评论(0编辑  收藏  举报

导航