OJ练习题

1十六进制转成十进制显示

	char a[10];
	gets_s(a);
	int len  = strlen(a);
	int sum  = 0,
	int weight = 1;
	for(int i=len-1;i>1;i--)
	{
		if(a[i]>='0' &&a[i]<='9')
		{
			sum=sum+(a[i]-48)*weight;
			weight=weight*16;
		}
		else if (a[i]>='A' &&a[i]<='F')
		{
			sum+=(a[i]-55)*weight;
			weight*=16;
		}
		else if(a[i]>='a' &&a[i]<='f')
		{
			sum+=(a[i]-87)*weight;
			weight*=16;
		}
		
	}
	cout<<sum<<endl;
	return 0;


</pre>2 字符串加密</p><p><pre name="code" class="cpp">#include<iostream>
#include<cstring>
using namespace std;
#define M 100
int main()
{
	char key[M],data[M],encrypt[M];
	void Encrypt(char *key,char *data,char *encrypt);
	gets(key);
	gets(data);
	Encrypt(key,data,encrypt);
	cout<<encrypt<<endl;
	return 0;
}
void Encrypt(char *key,char *data,char *encrypt)
{
	char keych[M];
	keych[0]=key[0];
	int i,j=0,k=0,flag;
	for(i=0;key[i]!='\0';i++)//把已去掉密钥中重复字符的密钥赋给keych[],
	{
		flag=1;
		for(k=0;k<j+1;k++)
		{
			if(key[i]==keych[k])
				flag=0;
		}
		if(flag)
		{
			j=j+1;
			keych[j]=key[i];
		}
	}
	int len;
	len=j+1;//keych的长度
	char Alph[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for(i=0;Alph[i]!='\0';i++)//keych[]补全,长度为26
	{
		flag=1;
		for(k=0;k<len;k++)
		{
			if(Alph[i]==keych[k])
				flag=0;
			if(Alph[i]==keych[k]-32)
			{
				keych[k]=keych[k]-32;flag=0;
			}
		}
		if(flag)
		{			
			keych[len]=Alph[i];
			len=len+1;
		}
	}
	keych[len]='\0';
	i=0;k=0;
	while(data[i]!='\0')//明文转换为密文
	{
		if((data[i]>='A'&&data[i]<='Z')||(data[i]>='a'&&data[i]<='z'))
		{
			for(j=0;j<26;j++)
			{
				if((data[i]==Alph[j])||(data[i]-32==Alph[j]))
				{
					if(data[i]>='A'&&data[i]<='Z')
						encrypt[k]=keych[j];
					else
						encrypt[k]=keych[j]+32;
					break;
				}	
			}
		}
		else 
			encrypt[k]=data[i];
		i=i+1;k=k+1;
	}
	encrypt[k]='\0';
}

大数问题大正数相加


#include <iostream>
#define N 10000 
using namespace std;
void Longadd(char *s1,char *s2)
{
	int len1=strlen(s1),len2=strlen(s2);
	int a[N]={0},b[N]={0};
	for (int i=0;i<len1;i++)
		a[i]=s1[len1-1-i]-'0';
	for (int i=0;i<len2;i++)
		b[i]=s2[len2-1-i]-'0';
	int len=(len1>len2 ? len1:len2);
	for (int i=0;i<len;i++)
	{
		a[i]+=b[i];
		if (a[i]>=10)
		{
			a[i]=a[i]%10;
			a[i+1]++;
		}
	}
	if (a[len])
		cout<<a[len];
	for (int i=len-1;i>=0;i--)
		cout<<a[i];
	cout<<endl;
}

int main()
{
	char m[100],n[100];
	gets(m);
	gets(n);
	Longadd(m,n);
	return 0;
}

矩阵相乘

已知利用牛顿迭代法求方程F(x)=0的解的公式为X[n+1] = X[n] - F(X[n])/F'(X[n]),其中x[n]为第n次利用此公式求得值。

假如函数F(X) = X*X*X + a, 则根据牛顿迭代法第n+1次求方程F(x) = 0的解为X[n+1], 且X[n+1] = X[n] -  (X[n]*X[n]*X[n]+a)/3*X[n]*X[n]。

利用C语言实现求一个实数立方根的代码如下:

// -- cuberoot.c -- 求一个实数的立方根
typedef enum Boolean{FALSE, TRUE}Boolean;
 
/*
    函数: double CubeRoot(double)
    功能: 求解一个数的立方根 
    算法: 牛顿法 
    使用: 输入一个实数,输出输入实数的立方根 
*/
double CubeRoot(const double stuff)
{
    const double  precision = 0.00001; /* 精度 */
    double nextX, currentX;
    double squareX;     /* 当前值 的平方 */
    double cubeX;       /* 下个解 的立方 */
    Boolean flag;
     
    currentX = stuff;  /* 初始化当前的值为X */
     
    if (stuff == 0)
    {
        return stuff;
    }
    else
    {
        do
        {
            squareX = currentX * currentX;
            nextX = (2*currentX + stuff/squareX) / 3;       /* 牛顿迭代公式 */
            cubeX = nextX*nextX*nextX;
            if ( (cubeX - stuff < precision) && (cubeX - stuff > -precision))
            {
                flag = TRUE;
            }   
            else
            {
                flag = FALSE;
                currentX = nextX;
            }
        }while(flag == FALSE);
    }
     
    return nextX;
}

字符串分割

//字符串分割(8个一拆)/
/*#include<iostream>            //成功//
#include<cstring>  
using namespace std;  
  
#define M 80  
int main()  
{  
    int n,i,j,k,len;  
    cin>>n;  
    char a[M][100];char b[8];  
    for(i=0;i<n;i++)  
        cin>>a[i];  
    for(i=0;i<n;i++)  
    {  
        len=strlen(a[i]);  
        j=8-len%8;  
        for(k=0;k<j;k++)  
        {  
            b[k]='0';  
        }  
        b[k]='\0';  
        strcat(a[i],b);  
    }  
    for(i=0;i<n;i++)  
    {  
        len=strlen(a[i]);  
        for(j=0;j<len;j++)  
        {  
            cout<<a[i][j];  
            if((j+1)%8==0)  
                cout<<endl;  
        }  
    }  
    return 0;  
} */

/求解立方根//
/*#define E 0.0001		//精度设置
using namespace std;
double getCubeRoot(double num)
{
       double x0=num;
	   double result;
	   while (1)
	   {
		   result=x0-(x0*x0*x0-num)/(3*x0*x0);
		   if (result*result*result-num<E &&result*result*result-num>-E)
		     return result;
		   else
			   x0=result;
	   }
}

int main()
{
	int number;
	cin>>number;
	cout<< fixed << showpoint << setprecision(1)<<getCubeRoot(number)<<endl;
}*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值