这道题的难点是大精度整数的除法运算,一般的想法肯定是不好实施,所以还是用之前学到的万能进制转换函数,然后判断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;
}
另,今天早上想听一首歌,忘记名字了,打开网易云的推荐歌单,第一首就是这首歌,网易云音乐的推荐算法太给力了!对了,是粥大爷的出山。