1799 大整数的因子

  描述

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

输入

输入从文件 bignum.in 读取。若干个非负整数 c,c 的位数 <= 30。每行一个 c,当 c=-1 时中止(不要对-1进行计算!)

输出

请把结果保存到 bignum.out 中,每一个 c 的结果占一行。

1) 若存在满足 c % k == 0 的 k,输出所有这样的 k,中间用空格隔开,最后一个 k 后面有空格。
2) 若没有这样的 k 则输出 "none"。

 

 

模拟题

#include<stdio.h>
#include<iostream>
#include<fstream>
#include<memory.h>
using namespace std;

ifstream fin( "bignum.in" );
ofstream fout( "bignum.out" );
#define cin fin
#define cout fout
char list[100];
int num[100];
int total;
int f(){
 int k=0;
 int num2[100];
 memcpy(num2,num,total*sizeof(int));
 for(int i=1;i<total-2;i++){
  k=10*num2[i-1]+num2[i];
  num2[i-1]=0;
  if(k%7){num2[i]=k%7;}
  else {num2[i]=0;}
 }
 return ((100*num2[total-3]+10*num2[total-2]+num2[total-1])%7==0);
  
}
int test(){
 bool jud=0;
 if(total==1){if(num[0]%7==0)jud=1;}
 if(total==2){if((10*num[total-2]+num[total-1])%7==0)jud=1;}
 if(total==3){if((100*num[total-3]+10*num[total-2]+num[total-1])%7==0)jud=1;}
 if(total>3)jud=f();
 if(jud==1)return 1;
 else return 0;
 
}
int main(){
 while(scanf("%s",list)!=EOF){
 if(list[0]=='-')break;
 bool jud[10]={};
 bool cont=0;
 total=0;
 memset(num,0,sizeof(num));
 for(int i=0;i<100;i++){
  if(list[i]=='\0')break;
  num[i]=list[i]-'0';total=i+1;
 }
 if(num[total-1]%2==0){printf("2 ");jud[2]=1;cont++;}
 int sub=0;
 for(int i=0;i<total;i++){
  sub+=num[i];
 }
 if(sub%3==0){printf("3 ");jud[3]=1;cont++;}
 if(total==1){if(num[0]%4==0){printf("4 ");jud[4]=1;}}
 else if((10*num[total-2]+num[total-1])%4==0)printf("4 ");
 if(num[total-1]==0||num[total-1]==5){printf("5 ");cont++;}
 if(jud[2]==1&&jud[3]==1)printf("6 ");
 if(test()){printf("7 ");cont++;}
 if(total>2){if((100*num[total-3]+10*num[total-2]+num[total-1])%8==0)printf("8 ");}
 else if((10*num[total-2]+num[total-1])%8==0)printf("8 ");
 if(sub%9==0)printf("9 ");
 if(cont==0)printf("none");
 printf("\n");

}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值