分数a/b化为小数后,小数点后第n位的数字是多少?
三个正整数a,b,n,相邻两个数之间用单个空格隔开。0<a<b<100,1<=n<=100000
一个数字。
1 2 1
5
大约6-7位
大约15-16位
本题精度超过double
#include <iostream>
using namespace std;
int main(){
int n,a,b;
cin>>a>>b>>n;
for(int i=1;i<=n;i++) {
a = a % b;
a = a * 10;
}
cout<<a/b<<endl;
return 0;
}
性质1:(a+b)%m=(a%m+b%m)%m
性质2:(a-b)%m=(a%m-b%m)%m
性质3:(a* b)%m=(a% m* b%m)%m
性质4:(a^b)%m 循环性质3
* 用到了模运算的性质 * (a^b)%m计算很可能a^b就越界了 * 所以把它看成1*a*a*a*a*a……*a 总共有b个a * 已知(a*b)%m=(a%m*b%m)%m * 所以(a^b)%m=循环--> s=(s%m+a%m)%m这个语句一直循环b次
void text01(){
int a,b,s=1;
cin>>a>>b;
/*
* 用到了模运算的性质
* (a^b)%m计算很可能a^b就越界了
* 所以把它看成1*a*a*a*a*a……*a 总共有b个a
* 已知(a*b)%m=(a%m*b%m)%m
* 所以(a^b)%m=循环--> s=(s%m+a%m)%m这个语句一直循环b次
* */
for(int i=1;i<=b;i++){
s=(s%m*a%m)%m;
}
printf("%03d",s);
}
当题目中是一个大数据量让你求末多少位的时候,一般要考虑模运算的性质
printf("%03d",3)
程序中的可执行部分,是由函数堆叠而成的
存放的是非零的全局变量和静态局部变量
zero initial 初始化位0的字段
存放的是为另的全局变量
vector
list
stack
queue
priority_queue
set
map
unorder_set
unorder_map
容器与算法之间的粘合剂
max_element()
min_element()
sort()
可以引入头文件
#include <algorithm>
参1:待排序区间首元素的地址
参2:待排序区间为元素地址的下一位
参3:比较器/比较规则,默认缺省时,则针对C++已有数据类型进行升序排序
若此时数据是自定义的数据类型或者需要改写排序规则的话,需要重写参3
STL中所有传参为区间形式的函数,区间都应该遵循左闭右开原则
#pragma once
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e8+10;
int nums[N],n;
bool cmp(int left,int right){//回调函数充当排序规则
return left>right;
}
void text01(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>nums[i];
}
sort(nums+1,nums+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<nums[i]<<" ";
}
}
#pragma once
#include <iostream>
#include <algorithm>
using namespace std;
bool IsPrime(int x){
for(int i=2;i*i<=x;i++){//若根号前没有因子,根号后也一定没有因子了
if(x%i==0) return false;
}
return true;
}
void text01(){
int n;
cin>>n;
for(int i=2;i<=n;i++){
if(IsPrime(i)){
cout<<i<<" ";
}
}
}
素数的倍数一定不是素数,筛掉
#pragma once
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e3+10;
bool vis[N];//bool类型的标记数组
int prime[N],n,k;//prime数组
void E_sieve(){
fill(vis+2,vis+n+1,1);
for(int i=2;i<=n;i++){
if(vis[i]){//开始筛选
prime[++k]=i;//存入素数表
for(int j=i*i;j<=n;j=j+i){
vis[j]=false;
}
}
}
}
void text01(){
cin>>n;
E_sieve();
for(int i=1;i<=k;i++){
cout<<prime[i]<<" ";
}
}
#pragma once
#include <iostream>
#include <algorithm>
using namespace std;
const int N=5e3+10;
int ct[N],x,n;
void text01(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
if(!ct[x]) cout<<x<<" ";
ct[x]++;
}
}