常用逻辑结构

计算一个数的每位数

int a[1000];
int x;//x为输入的数
scanf("%d",&x);
for(int i = 0;x != 0;i++)
{
    a[i]=x%10;//a[0]~a[i]依次存入x的个位至~i位
    x/=10;
}

or:

int dg1,dg2,dg3,dg4;//代替数组
scanf("%d",&x);
dg1=x%10;
dg2=x/10 % 10;
dg3=x/100 % 10;
dg4=x/1000 % 10;
······

长度可变数组

#include<malloc.h>
int n;
int* p = NULL;	//申请的内存地址指针
	scanf("%d",&n);输入元素个数
	p = (int*)malloc(n*sizeof(int));//分配内存空间 
    for(i=0;i<n;i++)
    {
		scanf("%d",&p[i]);
	} 
 
    if(p!=NULL)
    {
		free(p);//释放硬盘空间
		p = NULL;
	} 

倒序输出

输入输出整数

int result = 0,x;
scanf("%d",&x);
while(x!=0)
{
    result = result*10 + x%10; 
    x/=10;
}
printf("%d",result);

or:

int n,a,b = 0;
scanf("%d",&n);
while(n>0)
{
    a=n%10;
    n/=10;//n=n/10;
    b=b*10 + a;
}

输入输出小数方法1

float result,a;
int temp;
scanf("%f",&a);
int i = 0;
for(;a==(int)a;i++)
{
    a*=10;//将a转换成整数
}
 
for(;temp != 0;)//计算部分
{
    temp=a%10;
    temp/=10;
    result=result*10 + temp;
}
 
for(;i==0;i--)
{
    a/=10;//转换回来
}

输出小数方法2

//相当于把小数当成字符串
char ch[100];
//#include<string>
//string ch;
for(int i = 0;i<100;i++)
scanf("%s",&ch[i]);
//scanf("%s",&ch);

数组倒序 O(2n):

int a[100]{0};
int j;
int i = 0;
for(; i<100; i++)
{
    a[i]=i;
}
for(int j = i;j>0;j--)
{
    a[i - j]=j;
}
 

数组倒序2 O(n):

    int a[10]={10,100,20,43,54,15,6,77,82,91};
    int i,t;
    for(i=0;i<10/2;i++)
    {
        t=a[i];
        a[i]=a[10-1-i];//值交换
        a[N-1-i]=t;
    }

自带函数倒序

#include <algorithm>
char ch[]="123456";
getline(cin,ch);
reverse(ch.begin(),ch.end());
//for(int i =ch.size()-1;i >= 0; i--)
//{
    //cout<<ch[i];
//}

数字交换

最简单:

int a,b,temp;
temp=a;
a=b;
b=temp;

位运算方法:

int a,b;
a=a^b;
b=a^b;
a=a^b;

返回顶部

字符串转数字

c++

#include <sstream>
int a;
string b;
stringstream ss;
ss<<b;
ss>>a;

数字排列

c++

#include <algorithm>
int a[100];
for(int i = 0;i<100;i++)
cin>>a[];
sort(a,a+100);//sort(首地址,末地址后一位)
//默认从小到大排列

数字比较大小

int a,b,c;
int max(int x,int y)
{
    return x>y?x:y;
}
int main()
{
    max(max(a,b),c);//链式编程思想,无限套
}

字符串操作

删除字符串特定字符并输出结果

#include <cstring>
#define N 50
 
char str[N];
char a;
char ans[N];
 
void dele()
{
	int len2 = 0;
	for (int i = 0; i < N; i++) {
		if (str[i] != a)
			ans[len2++] = str[i];
	}
}
 
int main()
{	gets(str);
	scanf("%c",&a);
	dele();
	printf("%s",ans);
	return 0;
}

查找字符串出现次数

#include <iostream>
using namespace std;
#include <string>
#define N 100
string str[N];
int n = 0;
string ans;
int main()
{
	for (int i = 0; i < N; i++)
	{
		cin >> str[i];
		if (getchar() == '\n')break;
	}
	cin >> ans;
	for (int i = 0; i < N; i++)
	{
		if (ans == str[i])n++;
	}
	
	cout<<ans<<" "<< n<<endl;
	return 0;
}

秒数转化时间t=HH:MM:SS

#include <stdio.h>  
#include <stdlib.h>  
int b[100000][3];  
int main()
{  
    int i,n=0,a;  
    scanf("%d",&n);  
        for(i=0;i<n;i++)  
        {  
            scanf("%d",&a);  
            b[i][0]=a%60;
            a/=60;  
            b[i][1]=a%60;  
            b[i][2]=a/=60;    
        }  
    for(i=0;i<n;i++)  
    {  
        printf("%02d:%02d:%02d\n",b[i][2],b[i][1],b[i][0]);  
    }  
    return 0;  
}
//c库有专门的时间计算类型