代码6.1
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
void Convert(int number) {
vector<int> answer;
if (number == 0){
answer.push_back(0);
}else{
while (number != 0){
answer.push_back(number % 2);
number /= 2;
}
}
for(int i = answer.size() - 1; i >= 0; i--){
printf("%d",answer[i]);
}
printf("\n");
}
int main(){
int number;
while(scanf("%d",&number) != EOF){
Convert(number);
}
}
8.2 八进制(此代码只适合0-9进制转二进制)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
void ConvertT2N(int number,int n){
vector<int> answer;
if(number == 0){
answer.push_back(0);
}else {
while(number != 0){
answer.push_back(number % n);
number /= n;
}
}
for(int i = answer.size() - 1; i >= 0; --i){
printf("%d",answer[i]);
}
printf("\n");
}
int main(){
int number;
while (scanf("%d",&number) != EOF){
ConvertT2N(number,8);
}
}
3.适合16进制转二进制
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
char Int2Char(int target){
if(target < 10){
return target + '0';
}else {
return target - 10 + 'A';
}
}
void ConvertT2N(int number,int n){
vector<char> answer;
if(number == 0){
answer.push_back('0');
}else {
while(number != 0){
answer.push_back(Int2Char(number % n));
number /= n;
}
}
for(int i = answer.size() - 1; i >= 0; --i){
printf("%c",answer[i]);
}
printf("\n");
}
int main(){
int number;
while (scanf("%d",&number) != EOF){
ConvertT2N(number,16);
}
return 0;
}
4.M-N
#include <iostream>
#include <cstdio>
using namespace std;
int Char2Int(char target){
if('0' <= target && target <= '9'){
return target - '0';
}else {
return target - 'A' + 10;
}
}
void ConvertM2T(string str, int m){
int number = 0;
for(int i= 0; i < str.size(); i++){
number *= m;
number += Char2Int(str[i]);
}
printf("%d\n",number);
}
int main(){
string str;
while(cin >> str){
str = str.substr(2);
ConvertM2T(str,16);
}
return 0;
}
5.例题6.4 进制转换2
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
char Int2Char(int target){
if(target < 10){
return target + '0';
}else {
return target - 10 + 'a';
}
}
int Char2Int(char target){
if('0' <= target && target <= '9'){
return target - '0';
}else {
return target - 'A' + 10;
}
}
long long ConvertM2T(string str, int m){
long long number = 0;
for(int i= 0; i < str.size(); i++){
number *= m;
number += Char2Int(str[i]);
}
return number;
}
void ConvertT2N(long long number,int n){
vector<int> answer;
if(number == 0){
answer.push_back(0);
}else {
while(number != 0){
answer.push_back(number % n);
number /= n;
}
}
for(int i = answer.size() - 1; i >= 0; --i){
printf("%d",answer[i]);
}
printf("\n");
}
int main(){
int m, n;
while(scanf("%d%d", &m, &n) != EOF){
string str;
cin >> str;
long long number = ConvertM2T(str, m);
ConvertT2N(number, n);
}
}
1.例题6.5 最大公约数
#include <iostream>
#include <cstdio>
using namespace std;
int GCD(int a,int b){
if(b == 0){
return a;
}else {
return GCD(b, a % b);
}
}
int main(){
int a,b;
while (scanf("%d%d", &a, &b) != EOF){
printf("%d\n",GCD(a,b));
}
return 0;
}
2.代码6.6
#include <iostream>
#include <cstdio>
using namespace std;
int GCD(int a,int b){
if(b == 0){
return a;
}else {
return GCD(b, a % b);
}
}
int main(){
int a,b;
while (scanf("%d%d", &a, &b) != EOF){
printf("%d\n",a*b / GCD(a,b));
}
return 0;
}
例题6.7
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
bool Judge(int n) {
if(n < 2){
return false;
}
int bound = sqrt(n);
for(int i = 2; i <= bound; ++i){
if(n % i == 0){
return false;
}
}
return true;
}
int main(){
int n;
while(scanf("%d",&n) != EOF){
if(Judge(n)){
printf("yes\n");
}else{
printf("no\n");
}
}
return 0;
}
习题6.6 输出第k个素数
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 1e5 + 10;
vector<int> prime;
bool isPrime[MAXN];
void Initial(){
for (int i = 0; i < MAXN; ++i){
isPrime[i] = true;
}
isPrime[0] = false;
isPrime[1] = false;
for(int i = 2; i < MAXN; ++i){
if(!isPrime[i]){
continue;
}
prime.push_back(i);
if(i > MAXN / i){
continue;
}
for(int j = i * i; j < MAXN; j += i){
isPrime[j] = false;
}
}
}
int main() {
Initial();
int k;
while (scanf("%d",&k) != EOF){
printf("%d\n",prime[k-1]);
}
return 0;
}
例题6.9质因数的个数
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 4e4;
vector<int> prime;
bool isPrime[MAXN];
void Initial(){
for (int i = 0; i < MAXN; ++i){
isPrime[i] = true;
}
isPrime[0] = false;
isPrime[1] = false;
for(int i = 2; i < MAXN; ++i){
if(!isPrime[i]){
continue;
}
prime.push_back(i);
if(i > MAXN / i){
continue;
}
for(int j = i * i; j < MAXN; j += i){
isPrime[j] = false;
}
}
}
int NumberOfPrimeFactor(int number){
int answer = 0;
for(int i = 0; i < prime.size(); i++){
int factor = prime[i];
if(number < factor){
break;
}
int exponent = 0;
while(number % factor == 0){
exponent++;
number /= factor;
}
answer += exponent;
}
if(number > 1){
answer += 1;
}
return answer;
}
int main() {
Initial();
int number;
while (scanf("%d",&number) != EOF){
printf("%d\n",NumberOfPrimeFactor(number));
}
return 0;
}
习题6.7约数的个数
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 4e4;
vector<int> prime;
bool isPrime[MAXN];
void Initial(){
for (int i = 0; i < MAXN; ++i){
isPrime[i] = true;
}
isPrime[0] = false;
isPrime[1] = false;
for(int i = 2; i < MAXN; ++i){
if(!isPrime[i]){
continue;
}
prime.push_back(i);
if(i > MAXN / i){
continue;
}
for(int j = i * i; j < MAXN; j += i){
isPrime[j] = false;
}
}
}
int NumberOfFactors(int number){
int answer = 1;
for(int i = 0; i < prime.size(); i++){
int factor = prime[i];
if(number < factor){
break;
}
int exponent = 0;
while(number % factor == 0){
exponent++;
number /= factor;
}
answer *= exponent + 1;
}
if(number > 1){
answer *= 2;
}
return answer;
}
int main() {
Initial();
int n;
while (scanf("%d",&n) != EOF){
if(n == 0){
break;
}
for(int i = 0; i < n; i++){
int number;
scanf("%d",&number);
printf("%d\n",NumberOfFactors(number));
}
}
return 0;
}
1.快速幂模板
#include <iostream>
#include <cstdio>
using namespace std;
int QuickPower(int x,int n) {
int answer = 1;
while(n != 0){
if(n % 2 == 1){
answer *= x;
}
n / 2; //n >> 1;
x *= x;
}
return answer;
}
2.例题6.10人见人爱A*B(模板的变形)
#include <iostream>
#include <cstdio>
using namespace std;
int QuickPower(int x,int n) {
int mod = 1000;
int answer = 1;
while(n != 0){
if(n % 2 == 1){
answer *= x;
answer %= mod;
}
n /= 2; //n >> 1;
x *= x;
x %= mod;
}
return answer;
}
int main(){
int a, b;
while(scanf("%d%d",&a,&b) != EOF){
if(a == 0 && b == 0){
break;
}
printf("%d\n",QuickPower(a,b));
}
return 0;
}
1.矩阵定义
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 100;
//矩阵定义
struct Matrix {
int row, col;
int maxtix[MAXN][MAXN];
Matrix(){}
Matrix(int r,int c): row(r), col(c){}
};
int main(){
return 0;
}
2.矩阵加法
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 100;
//矩阵定义
struct Matrix {
int row, col;
int maxtix[MAXN][MAXN];
Matrix(){}
Matrix(int r,int c): row(r), col(c){}
};
//矩阵加法
Matrix Add(Maxtrix x,Maxtrix y){
Matrix answer = Maxtrix(x.row,x.col);
for (int i = 0; i < answer.row; ++i){
for(int j = 0; j < answer.col; ++j){
answer.matrix[i][j] = x.matrix[i][j] + y.matrix[i][j];
}
}
}
int main(){
return 0;
}
3.矩阵相乘
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 100;
//矩阵定义
struct Matrix {
int row, col;
int maxtix[MAXN][MAXN];
Matrix(){}
Matrix(int r,int c): row(r), col(c){}
};
//矩阵加法
Matrix Add(Matrix x,Matrix y){
Matrix answer = Matrix(x.row,x.col);
for (int i = 0; i < answer.row; ++i){
for(int j = 0; j < answer.col; ++j){
answer.matrix[i][j] = x.matrix[i][j] + y.matrix[i][j];
}
}
}
//矩阵相乘
Matrix Multiply(Matrix x,Matrix y){
Matrix answer = Matrix(x.row, y.col);
for(int i = 0; i < answer.row; ++i){
for(int j = 0; j < answer.col; ++j){
answer.matrix[i][j] = 0;
for(int k = 0; k < x.col; ++k){
answer.matrix[i][j] = x.maxtix[i][k] + y.maxtix[k][j];
}
}
}
return answer;
}
int main(){
return 0;
}
4.例题6.11 计算两个矩阵的乘积
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 100;
//矩阵定义
struct Matrix {
int row, col;
int matrix[MAXN][MAXN];
Matrix(){}
Matrix(int r,int c): row(r), col(c){}
};
//矩阵加法
Matrix Add(Matrix x,Matrix y){
Matrix answer = Matrix(x.row,x.col);
for (int i = 0; i < answer.row; ++i){
for(int j = 0; j < answer.col; ++j){
answer.matrix[i][j] = x.matrix[i][j] + y.matrix[i][j];
}
}
return answer;
}
//矩阵相乘
Matrix Multiply(Matrix x,Matrix y){
Matrix answer = Matrix(x.row, y.col);
for(int i = 0; i < answer.row; ++i){
for(int j = 0; j < answer.col; ++j){
answer.matrix[i][j] = 0;
for(int k = 0; k < x.col; ++k){
answer.matrix[i][j] = x.matrix[i][k] * y.matrix[k][j];
}
}
}
return answer;
}
void InputMatrix(Matrix& x){
for(int i = 0; i < x.row; ++i){
for(int j = 0; j < x.col; ++j){
scanf("%d",&x.matrix[i][j]);
}
}
return ;
}
void OutputMatrix(Matrix x){
for(int i = 0; i < x.row; ++i){
for(int j = 0; j < x.col; ++j){
printf("%d ",x.matrix[i][j]);
}
printf("\n");
}
}
int main(){
Matrix x( 2, 3);
Matrix y( 3, 2);
InputMatrix(x);
OutputMatrix(y);
Matrix answer = Multiply(x,y);
OutputMatrix(answer);
return 0;
}