C语言_翁恺_编程练习

  1. 数字特征值

对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。

输入格式:
一个非负整数,整数的范围是[0,1000000]。
输出格式:
一个整数,表示计算结果。

输入样例:
342315
输出样例:
13

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

int main(){
    int n;
    int a = 0;//数字
    int b = 0;//位数
    int c = 0;//奇偶一致(逆)
    int count_a = 0;
    int count = 0;
    scanf("%d",&n);
    while (n>0){
        a = (n % 10 % 2 + 2) + a * 10;
        count += 1;
        b = count % 2 + 2 + b * 10;
        if (n % 10 % 2  == count % 2 ){
            c = c + 1*(pow(2,count_a));
        }else {
            c = c + 0*(pow(2,count_a));
        }
        count_a += 1;
        n /= 10;
    }
    printf("%d",c);
    return 0;
}

更好的答案

#include <stdio.h>
#include <math.h>
int main(){
    int num;
    int count=0;
    int a=0;
    int dig=0;
    scanf("%d",&num);
    do{
        count ++;
        a=num%10;
        if((a+count)%2==0){
            dig=dig+pow(2,count-1);
        }
        num /=10;
    }while(num>0);
    printf("%d",dig);
    return 0;
}
  1. 素数和

我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入格式:
两个整数,第一个表示n,第二个表示m。
输出格式:
一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入样例:
2 4
输出样例:
15

#include <stdio.h>

int main(){
    int prime;
    int n,m;
    int i,l;
    int count = 0;
    int sum = 0;
    scanf("%d %d",&n,&m);
    
    for (l=2;l<=200;l++){
        prime = 1;
        for (i=2;i<l;i++){ //判断 l 是否为素数
            if (l%i == 0){
                prime = 0; //不是素数
                break;
            }
        }
        if (prime == 1){
        count++;
        if (count>=n && count <= m){
            sum += l;
            // printf("%d,%d\n",sum,l);
        }
        }
    }
    printf("sum=%d",sum);
    return 0;
}
  1. 念整数

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi

输入格式:
一个整数,范围是[-100000,100000]。
输出格式:
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

输入样例:
-30
输出样例:
fu san ling

#include <stdio.h>

int main(){
    int n;//输入的一个数
    int mask = 1;
    int i;
    int isnegative = 0;
    
    printf("请输入一个数: \n");
    scanf("%d",&n);
    
    if (n < 0) {
        isnegative = 1;
        n *= -1;
        printf("fu ");
    }
    if (n == 0) printf("ling");
    
    int a = n;
    while(a>9){
        a /= 10;
        mask *= 10;
    }
    
    while(n>0){
        i = n / mask;
        n %= mask;
        mask /= 10;
        switch (i){
            case 0: printf("ling"); break;
            case 1: printf("yi"); break;
            case 2: printf("er"); break;
            case 3: printf("san"); break;
            case 4: printf("si"); break;
            case 5: printf("wu"); break;
            case 6: printf("liu"); break;
            case 7: printf("qi"); break;
            case 8: printf("ba"); break;
            case 9: printf("jiu"); break;
        }
        if(n>0) printf(" ");
    }
    
    printf("\n");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值