类与对象ios
求两个正整数a 和 b的最大公约数。c++
要求使用c++ class编写程序。能够建立以下class算法
输入描述函数
两个正整数a,b,而且1=<a,b <=10000加密
输出描述spa
a和b的最大公约数设计
样例输入code
1000 1000
样例输出对象
1000
#include <iostream> #include <iomanip> #include <algorithm> using namespace std; class Integer { private: int num; public: Integer(int n); int gcd(Integer b); }; Integer::Integer(int n) { num = n; } int Integer::gcd(Integer b) { int tmp_min = min(num, b.num); int tmp_max = max(num, b.num); while (tmp_max % tmp_min != 0) { int i = tmp_max; tmp_max = tmp_min; tmp_min = i % tmp_max; } return tmp_min; } int main() { int a, b; cin >> a >> b; Integer A(a); Integer B(b); cout << A.gcd(B) << endl; system("pause"); return 0; }
移位密码是最简单的一类代替密码,具体算法就是将字母表的字母右移k个位置(k<26),k称为密钥,并对字母表长度做模运算。blog
已知加密过程为:将每一个字母按照字母表的顺序右移k位。加密函数:E(m)=(m+k)%26. (明文 -> 密文)
现给你一串密文,所有由大写字母组成。请破译出明文!(密文 -> 明文)
请设计实现PassWord类:
class PassWord {
private:
int k;
public:
PassWord(int);
char convert(const char); // 解密函数
};
属于一个整数k,表明移位密码的密钥,k<26。
属于一个整数n,表明接下来输入字符的个数,接着输入n个字符
输出描述输出对应的明文
1 8 JMPWFZPV样例输出
ILOVEYOU
#include <iostream> #include <algorithm> #define MAX_LEN 1000 using namespace std; char sec[MAX_LEN + 10]; class PassWord { private: int k; public: PassWord(int i); char convert(const char c); }; PassWord::PassWord(int i) { k = i; } char PassWord::convert(const char c) { return (c - 'A' - k + 26) % 26 + 'A'; } int main() { int k, n; //k表明移位的密匙,c表明字符数 cin >> k >> n; PassWord password(k); for(int i = 0; i < n; ++ i) { char a; cin >> a; sec[i] = password.convert(a); } for (int i = 0; i < n; ++i) cout << sec[i]; cout << endl; system("pause"); return 0; }
乘数密码也是一种替换密码,其加密变换是将明文字母串逐位乘以密钥k并进行模运算,数学表达式以下:
E(m) = k*m mod 26 (明文 -> 密文)
现给你一串明文,所有由大写字母组成,请加密成密文。
请设计实现PassWord类:
class PassWord {
private:
int k;
public:
PassWord(int);
char convert(const char); // 加密函数
};
输入描述
属于一个整数k,表明乘法密码的密钥,0 < k < 26。
属于一个整数n,表明接下来输入字符的个数,接着输入n个字符
输出描述输出对应的密文
3 8 ILOVEYOU样例输出
YHQLMUQI
#include <iostream> using namespace std; char sec[1000]; class PassWord { private: int k; public: PassWord(int t); char convert(const char c); }; PassWord::PassWord(int t) { k = t; } char PassWord::convert(const char c) { return (c - 'A') * k % 26 + 'A'; } int main() { int k, n; cin >> k >> n; PassWord p(k); for (int i = 0; i < n; ++i) { char a; cin >> a; sec[i] = p.convert(a); } for (int i = 0; i < n; ++i) cout << sec[i]; cout << endl; system("pause"); return 0; }
乘数密码也是一种替换密码,其加密变换是将明文字母串逐位乘以密钥k并进行模运算,数学表达式以下:
E(m) = k*m mod 26 (明文 -> 密文)
现给你一串密文,所有由大写字母组成,请破译出明文。(密文 -> 明文)
请设计实现PassWord类:
class PassWord {
private:
int k;
public:
PassWord(int);
char convert(const char); // 解密函数
};
此处'A'对应0, 'Z'对应25,好比像得到'C'的对应的值能够使用'C' - 'A', 即为2
属于一个整数k,表明乘法密码的密钥,k<26。
属于一个整数n,表明接下来输入字符的个数,接着输入n个字符
输出描述输出对应的密文
3 8 YHQLMUQI样例输出
ILOVEYOU
#include <iostream> using namespace std; char sec[1000]; class PassWord { private: int k; public: PassWord(int t); char convert(const char c); }; PassWord::PassWord(int t) { k = t; } char PassWord::convert(const char c) { int i = c - 'A'; for(int j = 0; ; ++ j) { int m = i + j * 26; if (m % k == 0 && m / k >= 0 && m / k < 26) { m /= k; return char(m + 'A'); } } } int main() { int k, n; cin >> k >> n; PassWord p(k); for (int i = 0; i < n; ++i) { char c; cin >> c; sec[i] = p.convert(c); } for (int i = 0; i < n; ++i) cout << sec[i]; cout << endl; system("pause"); return 0; }