思路借鉴了排名第一的火影哥
大整数的因子
https://www.nowcoder.com/practice/3d6cee12fbf54ea99bb165cbaba5823d
#include <stdio.h> #include<string.h> int mochu(int a[],int len,int i){//判断能否整除 int sum=0; for(int j=0;j<len;j++){ sum=(sum*10+a[j])%i;//牛逼 } if(sum==0)return 1; else return 0; } int main(){ char c[31];int a[30],tap; while(scanf("%s",c)!=EOF){ if(strcmp(c,"-1")==0){ return 0; } tap=0;//tap记录输出了几个 for(int i=0;i<strlen(c);i++)//把字符转化位整数 a[i]=c[i]-'0'; int i; for(i=2;i<=9;i++){//先输出第一个满足条件的i if(mochu(a,strlen(c),i)){ printf("%d",i); tap++; break; } } for(i++;i<=9;i++){//剩下的再输出,可以保证最后一位后面没有空格 if(mochu(a,strlen(c),i)){ printf(" %d",i); tap++; } } if(tap==0)//一个没输出就none printf("none"); printf("\n"); } return 0; }