大整数的因子

大整数的因子

由于除数为低精度,所以整个求解过程与高精度除法差异很大,

仅需维持一个不大的中间变量(此处为x)即可。

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 const int N=35;
 6 
 7 int main(){
 8     //一个非负整数c,c的位数≤30
 9     char str[N];
10     cin>>str;
11     int a[N];
12     // memset(a,0,sizeof(a));
13     a[0]=strlen(str);
14     for(int i=1;i<=a[0];i++){
15         a[i]=str[i-1]-48;
16     }
17     //核心算法
18     bool flag=true;
19     for(int i=2;i<10;i++){
20         int x=0;
21         for(int j=1;j<=a[0];j++){
22             x=(x*10+a[j])%i;
23         }
24         //输出结果
25         if(x==0){
26             cout<<i<<" ";
27             flag=false;
28         }
29     }
30     if(flag)cout<<"none";
31     return 0;
32 }

 除以13

换了一个比前面大一丁点的除数而已,思路还是一致的。

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 const int N=105;
 6 
 7 int main(){
 8     //输入大于0,长度不超过100位
 9     char str[N];
10     cin>>str;
11     int a[N];
12     //数据初始化
13     memset(a,0,sizeof(a));
14     a[0]=strlen(str);
15     for(int i=1;i<=a[0];i++){
16         a[i]=str[i-1]-48;
17     }
18     //核心算法
19     int borrow=a[1];
20     bool flag=true;
21     for(int i=2;i<=a[0];i++){
22         int tmp=borrow*10+a[i];
23         borrow=tmp%13;
24         if(flag&&tmp/13<1){
25             continue;
26         }
27         flag=false;
28         cout<<tmp/13;
29     }
30     if(flag)cout<<0;
31     cout<<"\n"<<borrow;
32     
33     return 0;
34 }

 

posted @ 2021-07-31 22:02  Rekord  阅读(292)  评论(0编辑  收藏  举报