信息学奥赛一本通 1171:大整数的因子 | OpenJudge NOI 1.6 13:大整数的因子
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1171:大整数的因子 | OpenJudge NOI 1.6 13:大整数的因子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1171:大整數的因子
OpenJudge NOI 1.6 13:大整數的因子
【題目考點】
1. 高精度
考察:高精模低精
高精度計算講解
【解題思路】
先把參與運算的數字當成低精度數字,來解決這個問題,不難寫出代碼:
int main() {int k, c;cin >> c;bool hasK = false;for(int k = 2; k <= 9; ++k){if(c % k == 0){cout << k << ' ';hasK = true;}}if(hasK == false)cout << "none";return 0; }本題中,c是高精度數字,k范圍為2~9,仍然是低精度數字。那么只需要把c%k==0改寫為高精模低精,即可解決該問題。
【題解代碼】
解法1:函數+數組
#include<bits/stdc++.h> using namespace std; #define N 35 //將字符數組轉化為數字數組 數字數組從第1位置到第len位置,從低位到高位保存各位數字,第0位置保存數字位數 void toNum(char s[], int a[]) {a[0] = strlen(s);for(int i = 1; i <= a[0]; ++i)a[i] = s[a[0] - i] - '0'; } //高精模低精 int Mod(int a[], int b) {int x = 0;for(int i = a[0]; i >= 1; --i)x = (x * 10 + a[i]) % b;return x; } int main() {int n, k, c[N] = {}; char s[N];bool hasK = false;cin >> s;toNum(s, c);for(k = 2; k <= 9; ++k){if(Mod(c, k) == 0){cout << k << ' ';hasK = true;}}if(hasK == false)cout << "none";return 0; }解法2:類中重載運算符
#include <bits/stdc++.h> using namespace std; #define N 35 struct HPN {int a[N];//數字數組HPN(){memset(a, 0, sizeof(a));}HPN(char s[]){memset(a, 0, sizeof(a));int len = strlen(s);for(int i = 0; i < len; ++i)a[len - i] = s[i] - '0';a[0] = len;}int operator % (int b) //高精模低精{int x = 0;for(int i = a[0]; i >= 1; --i)x = (x * 10 + a[i]) % b;return x;} }; int main() {char s[N];cin >> s;HPN c(s);//高精數字c bool hasK = false;for(int k = 2; k <= 9; ++k){if(c % k == 0)//高精模低精 {cout << k << ' ';hasK = true;}}if(hasK == false)cout << "none";return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1171:大整数的因子 | OpenJudge NOI 1.6 13:大整数的因子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中的字符串_Java中的字符串
- 下一篇: mysql备份表恢复数据库_mysql备