文章目录

  • 3.1 % 运算符
  • 3.2 数位拆解
  • 3.3 进制转换
  • 3.4 最大公约数(GCD)
  • 3.5 最小公倍数(LCM)
  • 3.6 素数筛法
  • 3.7 分解素因数
  • 3.8 二分求幂
  • 3.9 高精度整数

3.1 % 运算符

求余操作c = a%b,要求a,b必须是整型,不能是浮点数。且除数b不能为零。但是根据定义,余数c的符号和被除数a相同,当a为负数的时候,余数c为负数。这经常不满足我们的使用要求,一般数论要求余数c的范围在【0,b-1】。很明显我们可以通过c+b满足这个要求,但是,这时整除的余数0就变成了b,所以可以再次进行求余操作。即:

r1 = (r0 + b)%b //加余求余

两个公式:

(a * b) % c = (a%c * b%c) % c  //相乘再求余,等于求余,相乘再求余
(a + b) % c = (a%c + b%c) % c  //相加再求余,等于求余,相加再求余

3.2 数位拆解

思路

x = (a*1000 + b*100 + c*10 + d)
d = x%10;
c = (x/10)%10;    //整除除法,只会保留整数部分
b = (x/100)%10;
a = (x/1000)%10;

举例:

#include<iostream>
using namespace std;
int main()
{int x = 5678;int d = x % 10;int c = (x / 10) % 10;    //整除除法,只会保留整数部分int b = (x / 100) % 10;int a = (x / 1000) % 10;cout << a << b << c << d << endl;// 分别得到 5,6,7,8return 0;
}

输入123,45,输出54。数字左对齐后求和:

#include<iostream>
using namespace std;
int main()
{int a, b;while (scanf_s("%d%d", &a, &b) != EOF){int buf1[20], buf2[20], size1 = 0, size2 = 0;//第一个数while (a != 0){buf1[size1++] = a % 10; //取个位a /= 10;                  //数值缩小10倍}//第二个数while (b != 0){buf2[size2++] = b % 10; //取个位b /= 10;                   //数值缩小10倍}//计算结果int ans=0;for (int i = 0; i < size1; i++){for (int j = 0; j < size2; j++){ans += buf1[i] * buf2[j];}}printf("%d\n", ans);return 0;}
}

也可以考虑把输入的数字放入字符数组,然后通过利用ascii码,转换为数字

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{char a[11], b[11];cin >> a >> b;//输入两个数int ans = 0;for (int i = 0; a[i]!=0; i++){for (int j = 0; b[j] != 0; j++){ans += (a[i] -'0')* (b[j]-'0');//每个字符转换为数字进行相乘求和}}printf("%d\n", ans);return 0;
}

3.3 进制转换

m进制转换成n进制:

1.m 进制转换成十进制:依次计算各个数位的数字与该位权重的积(第i的权重为k^(i-1)),然后依次累加。
2.十进制转换成 n 进制:不断地对十进制数进行求余(对n),求商(除以n)
例:十进制数转换成m进制

do{ans[size++] = a%m;a/ = m;
}while(a!=0)

3.4 最大公约数(GCD)

使用欧几里得算法:
若a,b全为零,则他们的最大公约数不存在;若a,b其中之一为零,则最大公约数为a,b中的非零数;若都不为零,则可以使新a=b,b=a%b,重复该过程,直到其中一个为零。

# include<stdio.h>
int gcd(int  a,int b){if(b==0) return a;else return gcd(b,a%b);
}

3.5 最小公倍数(LCM)

结论:a,b两数的最小公倍数是两数乘积除以他们的最大公约数。所以求得最大公约数即求得最小公倍数。

3.6 素数筛法

 int prime[10000];   //保存素数int primeSize;        //素数计数bool mark[10001]; //标记for (int i = 2; i < 10000; i++)               //  遍历{ if (mark[i] == true) continue;            //  跳过已标记为合数的数prime[primeSize++] = i;                    //  保存素数for (int j  = i*i; j < 10000; j+=i)       //  标记素数乘积得到的合数(合数都是素数乘积得到){mark[j] = true;}}

3.7 分解素因数

即分解数n的素数和对应的指数。
方法:先找出能整除的素数,再求每个素数的指数。只需要先找出sqrt(n)的素数就行。

 int prime[100001];  // 保存有100000以内的素数int primeSize;     // 素数个数int n;               // (1,10^9)int ansPrime[30];    // 保存素因数int ansSize;        // 保存素因数个数int ansNum[30];       // 保存素因数对应的指数for (int i = 0; i < primeSize; i++)      // 遍历每个素数{if (n%prime[i] == 0) {              // 对于每个素因数ansPrime[ansSize] = prime[i];ansNum[ansSize] = 0;           // 指数初始化为0while (n%prime[i] == 0)         // 指数计数{ansNum[ansSize]++;n /= prime[i];}ansSize++;if (n == 1) break;                // 分解完成}}if (n != 1) {                         // 若100000之内素数不够,则还有其他数,且指数只能为1ansPrime[ansSize] = n;ansNum[ansSize++] = 1;}

3.8 二分求幂

非递归算法:考虑将指数使用二进制表示,若对应位是1则累乘。

void main(void)
{int a, b;int ans = 1;cin >> a >> b;while (b != 0){if (b % 2 == 1)   //当二进制位k位为1时,需要累乘a的2^k次方,然后用ans保存{ans *= a;}a *= a;        // 位数在移动,指数也在增加b /= 2;      //每次除以2,转换成二进制位}cout << ans;
}

递归算法:

double power(double a,unsigned int n)
{if(n==0)return 1;if(n==1)return a;double result=power(a,b>>1);//n>>1即n/2 result*=result;  // 如果n是偶数,则求得结果if(n & 0x1==1) //a & 0x1相当于a%2, 如果n是奇数,则再次乘底数result*=a;return result;
}

3.9 高精度整数

高精度整数加法:需要使用结构体保存若干位(例如4位),每次取4位进行计算,分别计算结果和进位,再依次进行计算。需要重写保存和重载运算符。

《计算机考研-机试指南》- 3数学问题相关推荐

  1. 王道出版的机试指南_《王道论坛计算机考研机试指南》试读版.pdf

    <王道论坛计算机考研机试指南>试读版 王道论坛 王道论坛计算机考研机试指南 王道论坛 2013.01.06 写在前面的话 各位王道的小崽子们,今天你们考完初试了,感觉解放了吧?轻松了吧?无 ...

  2. 计算机考研机试指南(八)——数学问题

    机试指南 cha4 数学问题 % 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> ...

  3. 计算机考研机试指南价格,计算机考研:机试指南(第2版)

    目前越来越多的高校开始采用上机考试的形式来考查学生的动手编程能力,而对于以应试为主的大学教学模式,上机往往是学生的薄弱环节.本书由浅入深.从简到难地讲解了机试的相关考点,并精选名校的复试上机真题作为例 ...

  4. 王道出版的机试指南_王道论坛计算机考研机试指南 四 排版题

    例2.7 输出梯形 (九度教程第14题) 时间限制:1秒 **内存限制:32兆 ** 特殊判题:否 题目描述: 输入一个高度h,输出一个高为h,上底边为h的梯形. 输入: 一个整数h(1<=h& ...

  5. 【读书笔记】《王道论坛计算机考研机试指南》第五章

    目录 第五章 并查集 最小生成树(MST) 最短路径 拓扑排序 第五章 并查集 本节讨论在图论问题中常常要使用到的一种数据结构一一集合,及其相关操作一一并查集. 我们先来看如下的数字集合: 集合A{1 ...

  6. 王道计算机考研机试指南二刷笔记-自用8

    目录 写在开头 第3章 排序与查找 3.1 排序 总结 3.2 查找 总结 写在开头 一刷到后面断更了,发现每题都写太浪费时间了. 一刷总结:数学问题.贪心.递归分治.数据结构二基本都刷完了,图论只刷 ...

  7. 王道论坛计算机考研机试指南怎么样,王道论坛计算机考研机试指南 二 日期类问题...

    二日期类问题 例2.3 日期差值 (九度教程第6题) 时间限制:1秒 **内存限制:32兆 ** 特殊判题:否 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数 ...

  8. 王道计算机考研j机试指南,王道论坛计算机考研机试指南 三 Hash的应用

    例2.5 统计同成绩学生人数 (九度教程第10题) 时间限制:1秒 **内存限制:32兆 ** 特殊判题:否 题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若 ...

  9. 王道计算机考研机试指南刷题笔记-自用

    | 写在开头 前两周磨磨唧唧把第二章暴力求解枚举部分的例题和习题都AC了,思路都不太难,找到规律很快就能写出来,想着一定要写刷题笔记,把coding时遇到的困难都记录下来,方便以后复习,却也一直未曾动 ...

最新文章

  1. php 消息中间件,消息中间件NMQ
  2. Select2控件的使用
  3. 为你的集成需求选择合适的ESB
  4. 小米用户画像_鹅智库发布手机品牌用户画像 一二线城市最爱小米 5G领域或占先机...
  5. pytorch checkpoint_pytorch的两种部署方式 web部署与c++部署
  6. Liunx的常用命令
  7. 一步一步学习 iOS 6 编程(第四版)正式发布!
  8. HDU 4267 A Simple Problem with Integers [树状数组]
  9. STL bitset用法总结
  10. TIM待办事项怎么删除 TIM删除待办事项的教程
  11. 全连接层的作用是什么?
  12. 【Linux初始化init系统】
  13. 小米开发版安装magisk_小米9手机不用解锁安装Magisk工具的教程
  14. C# TCP通讯大族激光打标机
  15. 简单易懂读《重构》 - Refused Bequest (拒绝继承的遗赠)
  16. 广义表((a,b),c,d)表头和表尾分别是什么?
  17. 电商平台分析平台----需求六:实时统计之黑名单机制
  18. 带有en的单词有哪些_en押韵的词语
  19. bboss-elasticsearch--使用/教程/实例
  20. 天才少年George Hotz在自家车库亲手打造了一台无人自驾驶汽车!

热门文章

  1. cat卡特鞋有实体店吗_cat卡特入驻天环广场户外鞋大黄靴强势坐馆
  2. 记mysql的outfile、lode_file失败
  3. 编程比赛记录 练习题答案
  4. 云计算|OpenStack|社区版OpenStack安装部署文档(九--- 创建一个虚拟机实例---Rocky版)
  5. RFIC(AD9361)助力无线通信
  6. JQuery实例:可以编辑的表格
  7. 适合练习日语听力的素材集锦
  8. Rufus怎么使用?Rufus制作Win10 U盘启动安装盘教程
  9. gt9xx驱动分析笔记
  10. 51单片机+直流电机PWM 10级调速控制