学习轨迹 5

完成√    102【入门3】循环结构

P1075 ​​​​​​[NOIP2012 普及组] 质因数分解

因为已知 正整数 n 是 两个不同的质数 的乘积 

所以从最小的数开始循环 之后再除以这个小的数 得出那个大的质数即可了、、


P1009 [NOIP1998 普及组] 阶乘之和

首先要学会高精度加法、乘法:高精度算法,高精度加法,高精度减法,高精度乘法,高精度除法,信息学奥赛算法,C++算法_哔哩哔哩_bilibili

以下是大佬的题解,和视频里的方法有点区别:

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[101]={0},s[101]={0};

//高精求积
void change(int x)
{
	int g=0;
	for(int i=100;i>=0;i--)
	{
		a[i]=a[i]*x+g;
		g=a[i]/10;
		a[i]=a[i]%10;
	}
}

//高精求和
void qh()
{
	int g=0;
	for(int i=100;i>=0;i--)
	{
		s[i]=s[i]+a[i]+g;
		g=s[i]/10;
		s[i]=s[i]%10;
	}
}

//查看最终结果在数组中的位置
void sc()
{
	int w;
	for(int i=0;i<=100;i++)
	{
		if(s[i]!=0)
		{
			w=i;
			break;
		}
	}
    
//打印
	for(int i=w;i<=100;i++)
	   printf("%d",s[i]);
}

int main()
{
	scanf("%d",&n);
	s[100]=a[100]=1;
	for(int i=2;i<=n;i++)
	{
		change(i);
		qh();
	}
	sc();
	return 0;
}

P1217 [USACO1.5] 回文质数 Prime Palindromes

这题我直接进行一个表的打(

//#include<bits/stdc++.h>
using namespace std;

//判断回文   123?=321
bool isp(int i)
{
    int x = 0, s = i;
    while (i != 0)
    {
        x = x * 10 + i % 10;
        i /= 10;
    }
    if (x == s) { return true; }
    else { return false; }
}

//判断质数
bool isz(int i)
{
    int j = 0;
    for (j = 2; j <= sqrt(i); j++)
    {
        if (i % j == 0)
        {
            break;
        }

    }        
    if (j > sqrt(i))
        {
            return true;
        }
        else
        {
            return false;
        }
}
int main()
{
    int a, b;
    cin >> a >> b;
    //若a为偶数+1取奇数
    if (a % 2 == 0)a++;
    //偶数位数的回文数能被11整除
    if (b >= 10000000)
    {
        b = 9999999;
    }

    for (int i = a; i <= b; i = i + 2)//i可以每次+2来取奇数
    {
        if (isp(i) && isz(i))
        {
            cout << i << endl;
        }
    }
}
  • 判断回文  可以通过数字反转 123?=321
  • 判断质数
  • 偶数位数的回文数能被11整除

SQL注入 

1.涉及函数
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符

mysql_escape_string() 转义一个字符串
2.原理

先了解一下什么是窄、宽字节已经常见宽字节编码:

  • 当某字符的大小为一个字节时,称其字符为窄字节.

  • 当某字符的大小为两个字节时,称其字符为宽字节.

  • 所有英文默认占一个字节,汉字占两个字节

  • 常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等 

        为什么会产生宽字节注入,其中就涉及到编码格式的问题了,宽字节注入主要是源于程序员设置数据库编码与PHP编码设置为不同的两个编码格式从而导致产生宽字节注入。

        如果数据库使用的的是GBK编码而PHP编码为UTF8就可能出现注入问题,原因是程序员为了防止SQL注入,就会调用我们上面所介绍的几种函数,将单引号或双引号进行转义操作,转义无非便是在单或双引号前加上斜杠(\)进行转义 ,但这样并非安全,因为数据库使用的是宽字节编码,两个连在一起的字符会被当做是一个汉字,而在PHP使用的UTF8编码则认为是两个独立的字符,如果我们在单或双引号前添加一个字符,使其和斜杠(\)组合被当作一个汉字,从而保留单或双引号,使其发挥应用的作用。但添加的字符的Ascii要大于128,两个字符才能组合成汉字 ,因为前一个ascii码要大于128,才到汉字的范围 ,这一点需要注意。

SQL语句 
  • SELECT column1, column2, ... FROM table_name;/ SELECT * FROM table_name;
  • SELECT DISTINCT column1, column2, ... FROM table_name;(DISTINCT 关键词用于返回唯一不同的值)
  • SELECT column1, column2, ...
    FROM table_name
    WHERE condition;(WHERE详细用法SQL WHERE 子句 | 菜鸟教程
  • AND & OR 运算符(例SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');)

  • SELECT column1, column2, ...
    FROM table_name
    ORDER BY column1, column2, ... ASC(默认)|DESC;
    (column1, column2, ...:要排序的字段名称,可以为多个字段。
    ASC:表示按升序排序。
    DESC:表示按降序排序。)
  • INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...);/
    没有指定要插入数据的列名的形式需要列出插入行的每一列数据:
    INSERT INTO table_name
    VALUES (value1,value2,value3,...);
  • UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
  • DELETE FROM table_name
    WHERE condition;
  • SELECT column_name(s) FROM table1
    UNION (ALL)
    SELECT column_name(s) FROM table2;

    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

3.一般流程:

Mysql 有一个系统数据库 information_schema,存储着所有的数据库的相关信息,一般的, 我们利用该表可以进行一次完整的注入。以下为一般的流程。

  • 猜数据库 select schema_name from information_schema.schemata
  • 猜某库的数据表 select table_name from information_schema.tables where table_schema=’xxxxx’
  • 猜某表的所有列 Select column_name from information_schema.columns where table_name=’xxxxx’
  • 获取某列的内容 Select *** from ***
4.一般用于尝试的语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值