考研计算机机试刷题修炼

大整数的因子

2019-05-08  本文已影响4人  故梦_三笙
image.png
这道题的难点是大精度整数的除法运算,一般的想法肯定是不好实施,所以还是用之前学到的万能进制转换函数,然后判断temp[0]是否为0。如果万能进制转换函数不太懂的话,请看我的文章十进制转换为二进制的代码。下面是这道题的代码:
#include<stdio.h>
#include<string.h>
int a[31],temp[1000];
void conversion(int d[],int data[],int n,int x,int y){
    int size=0;
    for(int i=0;i<n;){
        int k=0;
        for(int j=i;j<n;j++){
            int t=(d[j]+k*x)%y;
            d[j]=(d[j]+k*x)/y;
            k=t;
        }
        data[size++]=k;
        while(d[i]==0) i++;
    }
}
/*bool judge()
{
    if(temp[0]==0)
        return true;
     return false;
}*/
int main()
{
    char s[30];
    while(scanf("%s",s)!=EOF)
    {
        int num=0;
        int len=strlen(s);
        int i;
        for(i=0;i<len;i++)
        {
            a[i]=s[i]-'0';
        }
        for(i=2;i<=9;i++)
        {
            int b[31];
            for(int j=0;j<len;j++)
                b[j]=a[j];
            temp[1000]={0};
            conversion(b,temp,len,10,i);
            if(temp[0]==0)
            {
                num++;
                printf("%d ",i);
            }
        }
        if(num==0)
            printf("none");
        printf("\n");
    }
    return 0;
}

另,今天早上想听一首歌,忘记名字了,打开网易云的推荐歌单,第一首就是这首歌,网易云音乐的推荐算法太给力了!对了,是粥大爷的出山。

上一篇 下一篇

猜你喜欢

热点阅读