首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ACM札记四

ACM札记四

作者头像
慕白
发布2018-08-03 10:43:57
9690
发布2018-08-03 10:43:57
举报

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数组交换

输入一个正整数n(1 <n≤10),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。

#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同构数

同构数是其平方数的尾数等于该数自身的自然数,例如:25×25=625。从键盘输入一个不大于10000的自然数,判断其是否是同构数并按样例格式输出。

#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 字符串查询

在一个字串s1中查找一子串s2,若存在则返回s1中s2的个数和位置。

#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泰勒展开式

用exp(x)的泰勒级数前15项之和近似计算并输出exp(x)的值,实数x从键盘输入。级数表达式如下:

#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格式化输出

从键盘输入一个正整数,将该数乘2的积按3位一逗的格式输出。

#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求和

输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。

#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最近素数

从键盘输入一个大于2的正整数n,求解并输出大小最接近n的素数(不包括n)。

#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;
}
 

除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://cloud.tencent.com/developer/article/1176131

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x1互逆素数
  • 0x2 求数字的各个位数的和
  • 0x3数组交换
  • 0x4同构数
  • 0x5奇数输出
  • 0x6 字符串查询
  • 0x7泰勒展开式
  • 0x8格式化输出
  • 0x9统计字符串数目
  • 0x9求和
  • 0x10最近素数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档