20200907 day2 刷题记录

代码背诵:扩展gcd,素数筛,重载运算符

1 同余方程

洛谷

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
void exgcd1(long long a,long long b,long long &x,long long &y){
  if(!b){
    x=1;y=0;return ;
  }
  exgcd1(b,a%b,x,y);
  int temp=x;
  temp=x;
  x=y;
  y=temp-(a/b)*y;
  return;
}
long long a,b,d,x,y;
int main(){
  scanf("%lld %lld",&a,&b);
  exgcd1(a,b,x,y);
  printf("%lld",(x%b+b)%b);
  return 0;
}

2 1003 津津的储蓄计划

未AC原因:存钱之后没有减去【审题】

3 1007 阶乘和

【重载运算符】

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int N;
struct node{
  int len;
  int num[1005];
  friend node operator *(node a,int b){
    for(int i=1;i<=a.len;i++){
      a.num[i]*=b;
    }
    for(int i=1;i<=a.len;i++){
      if(a.num[i]>=10){
	a.len=max(a.len,i+1);
	a.num[i+1]+=a.num[i]/10;
	a.num[i]%=10;
      }
    }
    return a;
  }
  friend node operator +(node a,node b){
    int lena=max(a.len,b.len);
    for(int i=1;i<=lena;i++){
     a.num[i]+=b.num[i];
    }
    for(int i=1;i<=lena;i++){
      if(a.num[i]>=10){
	lena=max(lena,i+1);
	a.num[i+1]+=a.num[i]/10;
	a.num[i]%=10;
      }
    }
    a.len=lena;
    return a;
  }
  void print(){
    for(int i=len;i>=1;i--){
      printf("%d",num[i]);
    }
  }
  
}tot,jie;
int temp;
int main(){
  scanf("%d",&N);
  tot.len=jie.len=1;
  jie.num[1]=1;
  for(int i=1;i<=N;i++){
    jie=jie*i;
    tot=tot+jie;
  }
  tot.print();
  return 0;
}

要做就做南波万
原文地址:https://www.cnblogs.com/liuziwen0224/p/20200907day2-002.html