保留小数
cout << fixed << setprecision ( 1 ) << sum;
输出固定字节数
cout<< setw ( 3 ) << setfill ( ' ' ) << ans[ i] [ j] ;
排序
int d[ 4 ] = { 0 , a, b, c} ;
sort ( d+ 1 , d+ 4 ) ;
高精加
# include <bits/stdc++.h>
using namespace std;
string a, b;
int x[ 1000 ] ;
int y[ 1000 ] ;
int c[ 2010 ] ;
int main ( ) {
cin>> a>> b;
memset ( x, 0 , 1000 ) ;
memset ( y, 0 , 1000 ) ;
memset ( c, 0 , 2010 ) ;
for ( int i = 0 ; i< a. size ( ) ; i++ ) {
x[ i] = a[ a. size ( ) - 1 - i] - '0' ;
}
for ( int j = 0 ; j< b. size ( ) ; j++ ) {
y[ j] = b[ b. size ( ) - 1 - j] - '0' ;
}
int len = max ( a. size ( ) , b. size ( ) ) ;
for ( int n= 0 ; n< max ( a. size ( ) , b. size ( ) ) ; n++ ) {
c[ n] += x[ n] + y[ n] ;
c[ n+ 1 ] = c[ n] / 10 ;
c[ n] %= 10 ;
}
len += 1 ;
while ( c[ len] == 0 && len>= 1 ) {
len-- ;
}
for ( int i = len; i>= 0 ; i-- ) {
cout<< c[ i] ;
}
return 0 ;
}
pow(指数幂+迭代)
class Solution {
public :
double myMutl ( double x , long long N) {
double ans= 1.0 ;
double x_con = x;
while ( N > 0 ) {
if ( N% 2 ) {
ans*= x_con;
}
x_con*= x_con;
N/= 2 ;
}
return ans;
}
double myPow ( double x, int n) {
long long N = n;
return N>= 0 ? myMutl ( x, N) : 1.0 / myMutl ( x, - N) ;
}
} ;
埃氏筛
bool book[ 10000001 ] ;
void check1 ( int b) {
memset ( book, true , sizeof ( book) ) ;
book[ 1 ] = false ;
int n = sqrt ( b) ;
for ( int i = 2 ; i<= n; i++ ) {
if ( book[ i] ) {
for ( int j= 2 ; j<= b/ i; j++ ) {
book[ i* j] = false ;
}
}
}
}
回文数
int check3 ( int i) {
int tem = i, ans= 0 ;
while ( tem!= 0 ) {
ans = ans* 10 + tem% 10 ;
tem /= 10 ;
}
if ( ans == i) {
return 1 ;
} else {
return 0 ;
}
}
空格填充
class Solution {
public :
string replaceSpace ( string s) {
string a;
for ( auto & c: s) {
if ( c== ' ' ) {
a+= "%20" ;
} else {
a. push_back ( c) ;
}
}
return a;
}
} ;
字符串统计
# include <bits/stdc++.h>
using namespace std;
string s;
int main ( ) {
int ans = 0 ;
while ( cin >> s) {
for ( int i = 0 ; i<= s. size ( ) ; i++ ) {
if ( s[ i] >= 'a' && s[ i] <= 'z' ) { ans++ ; continue ;
}
if ( s[ i] >= 'A' && s[ i] <= 'Z' ) { ans++ ; continue ;
}
if ( s[ i] >= '0' && s[ i] <= '9' ) { ans++ ;
}
}
}
cout<< ans;
return 0 ;
}
统计单词数
# include <bits/stdc++.h>
using namespace std;
void s2l ( char * a) {
for ( int i= 0 ; a[ i] ; i++ ) {
if ( isupper ( a[ i] ) ) a[ i] = tolower ( a[ i] ) ;
}
}
int main ( ) {
char destination[ 1000001 ] , * q, source[ 11 ] , * p;
bool flag;
int ans1= 0 , ans2= - 1 ;
cin. getline ( source, 11 ) ;
cin. getline ( destination, 1000001 ) ;
s2l ( destination) ;
s2l ( source) ;
int len = strlen ( source) ;
p = destination;
for ( ; q = strstr ( p, source) ; ) {
if ( q != NULL
&& ( q == destination || * ( q - 1 ) == ' ' )
&& ( * ( q + len) == '\0' || * ( q + len) == ' ' ) ) {
ans1 ++ ;
if ( flag == false ) {
flag = true ;
ans2 = q - destination;
}
}
p = q + len;
}
if ( flag == true )
printf ( "%d %d" , ans1, ans2) ;
else
printf ( "%d" , ans2) ;
return 0 ;
}
数字反转
# include <bits/stdc++.h>
using namespace std;
string s;
int main ( )
{
string s;
char p= 0 ;
int cnt= 0 ;
cin>> s;
for ( int i= 0 ; i< s. size ( ) ; i++ )
{
if ( s[ i] >= '0' && s[ i] <= '9' ) cnt++ ;
else
{
p= s[ i] ;
break ;
}
}
int x= cnt;
cnt-- ;
while ( s[ cnt] == '0' && cnt> 0 ) cnt-- ;
for ( int i= cnt; i>= 0 ; i-- )
cout<< s[ i] ;
if ( p== 0 ) return 0 ;
else
if ( p== '%' ) { cout<< p; return 0 ; }
else cout<< p;
int m= s. size ( ) - 1 ;
while ( s[ x+ 1 ] == '0' && x< m- 1 ) x++ ;
while ( s[ m] == '0' && m> x+ 1 ) m-- ;
for ( int i= m; i> x; i-- )
cout<< s[ i] ;
return 0 ;
}
基于快排的寻找最小的k个数
class Solution {
int partition ( vector< int > & nums, int l, int r) {
int pivot = nums[ r] ;
int i = l - 1 ;
for ( int j = l; j <= r - 1 ; ++ j) {
if ( nums[ j] <= pivot) {
i = i + 1 ;
swap ( nums[ i] , nums[ j] ) ;
}
}
swap ( nums[ i + 1 ] , nums[ r] ) ;
return i + 1 ;
}
int randomized_partition ( vector< int > & nums, int l, int r) {
int i = rand ( ) % ( r - l + 1 ) + l;
swap ( nums[ r] , nums[ i] ) ;
return partition ( nums, l, r) ;
}
void randomized_selected ( vector< int > & arr, int l, int r, int k) {
if ( l >= r) {
return ;
}
int pos = randomized_partition ( arr, l, r) ;
int num = pos - l + 1 ;
if ( k == num) {
return ;
} else if ( k < num) {
randomized_selected ( arr, l, pos - 1 , k) ;
} else {
randomized_selected ( arr, pos + 1 , r, k - num) ;
}
}
public :
vector< int > getLeastNumbers ( vector< int > & arr, int k) {
srand ( ( unsigned ) time ( NULL ) ) ;
randomized_selected ( arr, 0 , ( int ) arr. size ( ) - 1 , k) ;
vector< int > vec;
for ( int i = 0 ; i < k; ++ i) {
vec. push_back ( arr[ i] ) ;
}
return vec;
}
} ;
俄罗斯农民乘法
int quickMulti ( int A, int B) {
int ans = 0 ;
for ( ; B; B >>= 1 ) {
if ( B & 1 ) {
ans += A;
}
A <<= 1 ;
}
return ans;
}
多个阶乘
# include <bits/stdc++.h>
# define fo ( i, j, k) for ( int i= j; i<= k; i++ )
using namespace std;
int t;
int n, a;
int c[ 10000 ] ;
string d[ 11 ] ;
int main ( )
{
cin>> t;
fo ( i, 1 , t) {
cin>> n>> a;
memset ( c, 0 , sizeof ( c) ) ;
c[ 0 ] = 1 ;
int l = 1 ;
fo ( j, 2 , n) {
int w = 0 ;
fo ( k, 0 , l- 1 ) {
c[ k] = c[ k] * j+ w;
w= c[ k] / 10 ;
c[ k] %= 10 ;
}
while ( w> 0 ) {
c[ l] = w% 10 ;
l++ ;
w/= 10 ;
}
}
int sum = 0 ;
fo ( j, 0 , l- 1 ) {
if ( c[ j] == a) sum++ ;
}
cout<< sum<< endl;
}
return 0 ;
}
快速幂高精
# include <bits/stdc++.h>
# define fo ( i, j, k) for ( int i= j; i<= k; i++ )
using namespace std;
int P;
int a[ 100000 ] = { 0 } , b[ 100000 ] = { 0 } ;
void js ( int n) {
if ( n== 0 ) return ;
js ( n/ 2 ) ;
if ( n% 2 == 0 ) {
fo ( i, 1 , 500 )
fo ( j, 1 , 500 )
a[ i+ j- 1 ] = a[ i+ j- 1 ] + b[ i] * b[ j] ;
}
if ( n% 2 ) {
fo ( i, 1 , 500 )
fo ( j, 1 , 500 )
a[ i+ j- 1 ] = a[ i+ j- 1 ] + b[ i] * b[ j] * 2 ;
}
fo ( i, 1 , 500 ) {
b[ i] = a[ i] % 10 ;
a[ i+ 1 ] = a[ i+ 1 ] + a[ i] / 10 ;
}
memset ( a, 0 , sizeof ( a) ) ;
}
int main ( )
{
cin>> P;
cout<< ( int ) ( P* log10 ( 2 ) + 1 ) << endl;
b[ 1 ] = 1 ;
js ( P) ;
for ( int i = 500 ; i> 1 ; i-- ) {
cout<< b[ i] ;
if ( i% 50 == 1 ) cout<< endl;
}
cout<< b[ 1 ] - 1 ;
return 0 ;
}
高精加+高精乘
# include <bits/stdc++.h>
using namespace std;
int S;
int a[ 101 ] , s[ 101 ] ;
void ji ( 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 jia ( ) {
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 ( )
{
cin>> S;
s[ 100 ] = a[ 100 ] = 1 ;
for ( int i= 2 ; i<= S; i++ ) {
ji ( i) ;
jia ( ) ;
}
sc ( ) ;
return 0 ;
}
二分查找土味版
class Solution {
public :
int search ( vector< int > & nums, int target) {
int left = 0 , right = nums. size ( ) - 1 ;
while ( left <= right) {
int mid = ( right- left) / 2 + left;
if ( nums[ mid] > target) {
right = mid - 1 ;
} else if ( nums[ mid] < target) {
left = mid+ 1 ;
} else {
return mid;
}
}
return - 1 ;
}
} ;
翻转单词+处理空格
class Solution {
public :
string reverseWords ( string s) {
reverse ( s. begin ( ) , s. end ( ) ) ;
int n = s. size ( ) ;
int idx = 0 ;
for ( int start = 0 ; start < n; ++ start) {
if ( s[ start] != ' ' ) {
if ( idx != 0 ) s[ idx++ ] = ' ' ;
int end = start;
while ( end < n && s[ end] != ' ' ) s[ idx++ ] = s[ end++ ] ;
reverse ( s. begin ( ) + idx - ( end - start) , s. begin ( ) + idx) ;
start = end;
}
}
s. erase ( s. begin ( ) + idx, s. end ( ) ) ;
return s;
}
} ;
语句解析
# include <bits/stdc++.h>
using namespace std;
string s;
int ans[ 3 ] ;
int main ( ) {
cin>> s;
for ( int i = 0 ; i< s. length ( ) - 1 ; i++ ) {
if ( s[ i] == '=' ) {
if ( s[ i+ 1 ] >= '0' && s[ i+ 1 ] <= '9' ) {
ans[ int ( s[ i- 2 ] ) - 97 ] = int ( s[ i+ 1 ] - '0' ) ;
} else {
ans[ int ( s[ i- 2 ] ) - 97 ] = ans[ int ( s[ i+ 1 ] ) - 97 ] ;
}
}
}
cout<< ans[ 0 ] << " " << ans[ 1 ] << " " << ans[ 2 ] ;
return 0 ;
}