NOI1.6.13大整数的因子

wuchangjian2021-11-14 18:46:21编程学习

描述

已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。

输入

一个非负整数c,c的位数<=30。

输出

若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。

样例输入

30

样例输出

2 3 5 6 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char c[40]= {0};
    int str[30]= {0},result[30]= {0};
    int i=1,k=0,count=0,len;
    int j=0;
    scanf("%s",c);
    len=strlen(c);
    for(i=0; i<len; i++)
    {
        result[len-i-1]=c[i]-'0';//转化为整型
    }

    for (k=2; k<=9; k++)
    {
        for (j=0;j<len;j++)
        {
            str[j]=result[j];//复制一个数组,后面数组改变,需要一个临时数组
            //这个方法有些笨,如果你们有更好的方法可以评论区留言(一时想不到其他的方法)
        }
        for (i=len-1; i>=0; i--)
        {
             if (str[i]%k!=0&&i!=0)
            {
                str[i-1]=str[i]%k*10+str[i-1];//每次除的时候都要保留本位除时的余数,如果余数不等于0,是要将得到余数*10与后一位前位数字相加
            }
            if (i==0)//最后个位能否被除尽的判断
            {
                if(str[i]%k==0)
                    printf("%d ",k);
                else if (str[i]%k!=0)
                    count++;

            }
        }
    }
    if(count==8)
        printf("none");
    return 0;
}

 

相关文章

java基础

                                            ...

shell脚本汇总

目录 1.for求和 2.搭建本地yum源 3.提取IP地址 4.查看机器基本信...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。