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;
}*/