ACM札记四

0x1互逆素数

```#include <stdio.h>
#include <math.h>

int getrnum(int num){
int rnum=0;
do{
rnum *= 10;
rnum = rnum + num%10;
}while((num/=10)!=0);
return rnum;
}

int sushu(int num){
int i,k;
k = (int)sqrt((double)num);
for(i=2;i<=k;i++){
if(num%i==0)
break;
}
if(i<k)
return 0;//返回值为0表示不为素数
else
return 1;
}

void keni(int num){
int flag,rnum;
flag = sushu(num);
if(flag == 0)
printf("no\n");
else{
rnum = getrnum(num);
flag = sushu(rnum);
if(flag == 0)
printf("no\n");
else
printf("yes\n");
}
}

int main(){
int num,rnum;
scanf("%d",&num);
keni(num);
getchar();
return 0;
}
```

```int getrnum(int num){
int rnum=0;
do{
rnum *= 10;
rnum = rnum + num%10;
}while((num/=10)!=0);
return rnum;
}
```

```//头文件<math.h>
int sushu(int num){
int i,k;
k = (int)sqrt((double)num);
for(i=2;i<=k;i++){
if(num%i==0)
break;
}
if(i<k)
return 0;//返回值为0表示不为素数
else
return 1;
}
```

0x2 求数字的各个位数的和

```#include <iostream>

using namespace std;

int sum(int x)
{
int i=0,s[8],sum=0;
do
{
s[i++]=x%10;
}
while((x/=10)>0);
for(;i>0;i--)
sum+=s[i-1];
return sum;
}

int main()
{
int num;
cin>>num;
cout<<sum(num);
}
```

>

0x3数组交换

```#include <iostream>

using namespace std;

int main()
{
int i,n;
int a[10];
cout<<"Input n: ";
cin>>n;
cout<<"Input "<<n<<" integers: ";;
for(i=0; i<n; i++)
{
cin>>a[i];
}
int s,p,j;
s=a[0];
p=0;
for(j=1; j<n; j++)
{
if(s<a[j])
{
s=a[j];
p=j;
}
}
a[p]=a[n-1];
a[n-1]=s;
s=a[0];
p=0;
for(j=1; j<n; j++)
{
if(s>a[j])
{
s=a[j];
p=j;
}
}
a[p]=a[0];
a[0]=s;
cout<<"After swapped: ";
for(i=0; i<n; i++)
{
cout<<a[i]<<" ";
}
return 0;
}
```

0x4同构数

```#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
int b=a*a-a;
int c=a,d=b;
while((c=c/10)!=0)
{
if(d%10!=0)
{
cout<<a<<" no,"<<a<<"*"<<a<<"="<<a*a;
return 0;
}
d=d/10;
}
if(d%10!=0)
cout<<a<<" no,"<<a<<"*"<<a<<"="<<a*a;
else
cout<<a<<" yes,"<<a<<"*"<<a<<"="<<a*a;

return 0;
}
```

0x5奇数输出

```#include <iostream>
using namespace std;
void function(int x)
{
if(x==0)
return;
function(x/10);
if(x%2!=0&&x>0)
cout<<x%10;
else if(x%2!=0&&x<0)
cout<<-x%10;
}

int main()
{
int x;
cin>>x;
if(x>0)
function(x);
else
{
cout<<"-";
function(x);
}
}#include <iostream>
#include <cstring>
using namespace std;

int main()
{
char s1[100],s2[10];
int i,j,k,len1,len2,b[10];
gets[s1];
gets[s2];
len1=strlen(s1);
len2=strlen(s2);
for(i=0,k=0; i<len1; i++)
{
for(j=0; j<len2; j++)
if(s1[i+j]!=s2[j])
break;
if(j>=len2)
b[k++]=i+1;   //i从0开始计数的，所以位置是i+1
}
cout<<k<<endl;   //k为s2在s1中出现的次数
for(i=0; i<k; i++)
cout<<b[i]<<" ";   //返回s2在s1中的位置,可能有多个
cout<<endl;
return 0;
}
```

0x6 字符串查询

```#include <iostream>
#include <cstring>
using namespace std;

int main()
{
char s1[100],s2[10];
int i,j,k,len1,len2,b[10];
gets[s1];
gets[s2];
len1=strlen(s1);
len2=strlen(s2);
for(i=0,k=0; i<len1; i++)
{
for(j=0; j<len2; j++)
if(s1[i+j]!=s2[j])
break;
if(j>=len2)
b[k++]=i+1;   //i从0开始计数的，所以位置是i+1
}
cout<<k<<endl;   //k为s2在s1中出现的次数
for(i=0; i<k; i++)
cout<<b[i]<<" ";   //返回s2在s1中的位置,可能有多个
cout<<endl;
return 0;
}
```

0x7泰勒展开式

```#include <iostream>

using namespace std;

int main()
{
float result=1,u=1,x;
int i=1;
cin>>x;
while(i<=14)
{
u=u*x/i;
result=result+u;
i++;
}
cout<<result;
}
```

0x8格式化输出

```#include <stdio.h>
#include <stdlib.h>

main()
{
unsigned long n;
int a[10],i;
scanf("%ld",&n);
n*=2;
for(i=0; n>0; i++)
{
a[i]=n%1000;
n/=1000;
}
for(i--; i>=0; i--)
printf("%d%c",a[i],i!=0?',':' ');
}
```

0x9统计字符串数目

```#include <iostream>

#include <cstdio>

using namespace std;

int main()
{
char s[100],a;
int i,b,c,d,e,f;
i=0;
b=0;
c=0;
d=0;
e=0;
f=0;
cout<<"Input a string:";
gets(s);
while(s[i]!='\0')
{
a=s[i];
if(a>='A'&&a<='Z')
b=b+1;
else if(a>='a'&&a<='z')
c=c+1;
else if(a==' ')
d=d+1;
else if(a>='1'&&a<='9')
e=e+1;
else
f=f+1;

i=i+1;
}
cout<<"Number of uppercase letters is :"<<b<<endl;
cout<<"Number of lowercase letters is :"<<c<<endl;
cout<<"Number of spacebars is :"<<d<<endl;
cout<<"Number of digits is :"<<e<<endl;
cout<<"Number of other characters is :"<<f<<endl;
}
```

0x9求和

```#include <iostream>

using namespace std;

int main()
{
int a,n,s=0;
cout<<"Input a, n: ";
cin>>a>>n;
while(n>=0)
{
s=a*n+s;
a=a*10;
n--;
}
cout<<"s="<<s<< endl;
return 0;
}
```

0x10最近素数

```#include <iostream>
#include <cmath>

using namespace std;

//判断素数
int isprime(int x)
{
int i;
if(x<2)
return 0;
for(i=2; i<sqrt(x); i++)
if(x%i==0)
return 0;
return 1;
}

int main()
{
int i,a,b,n;
cin>>n;
for(a=n+1; !isprime(a); a++); //不是素数就跳过，是素数就结束循环。
for(b=n-1; !isprime(b); b--);
if(a-n<n-b)
cout<<a<<endl;
else if(a-n==n-b)
cout<<a<<" "<<b<<endl;
else
cout<<b<<endl;
return 0;
}
```

69 篇文章25 人订阅

0 条评论

相关文章

7920

14820

14130

NYOJ-417-死神来了

ACM模版 描述 ? 题解 典型的鸽巢定理，给定 1∼n 个数，如果取超过一半的数，则一定存在一个数是另一个数的倍数。这里具体需要注意的是，n 如果是奇数时，这...

24770

25140

29930

32150

46040

256100