C语言_0301练习_cnt初始化/标志变量的值的循环/素数判断/10个一行,行末不多余空格/char b=‘B’;

07-0. 写出这个数

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100。

输出格式:

在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

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

    void shuchu(int m);
    int main()
    {
        int num,tem,sum=0;
        int i,cnt=0,sig;
        int tem2,ret;
        printf("请输入小于10100的自然数:\n");
        scanf("%d",&num);
        tem=num;//保护输入的值 
        while(tem!=0)
        {
            i=tem%10;//取个位数
            sum=sum+i;
            tem=tem/10;//去掉个位数
        }
        //printf("num的各个位数和=%d\n",sum);
        tem2=sum;
        do{
            tem2/=10;
            cnt++;
        }while(tem2!=0);//几位数  此时tem2为0 
        sig=pow(10,cnt-1);
        //printf("%d\n",sig);
        while(sig!=0)
        {
            ret=sum/sig;//120/100=1
            sum%=10;//120-20
            sig/=10;//10
            //printf("%d\n",ret);
            shuchu(ret);
            if(sig!=0)//没有到最后一位 输出“ ” 
            {
                printf(" ");
            }
        }
        
    }
    void shuchu(int m)
    {
        switch(m)
        {
            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;
        }
    }
    
  • //无法满足超出int的测试用例,答案如中用到了数组,第八章我还没看~就先这样把~

//07-0. 写出这个数
#include <stdio.h>
#include <string.h>
 
const char *num[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
 
int main()
{
    char ch, number[10];
    int s = 0, i;
    while( (ch = getchar()) != '\n' )
    {
        s += ch-'0';
    }
    sprintf(number, "%d", s);
    printf("%s", num[number[0]-'0']);
    for ( i=1; i<strlen(number); i++ )
    {
        printf(" %s", num[number[i]-'0']);
    }
    printf("\n");
 
    return 0;
}

07-1. 换个格式输出整数

让我们用字母B来表示“百”、字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。

输入格式:

每个测试输入包含1个测试用例,给出正整数n(<1000)。

输出格式:

每个测试用例的输出占一行,用规定的格式输出n。

输入样例1:

234

输出样例1:

BBSSS1234

输入样例2:

23

输出样例2:

SS123

#include <stdio.h>
    void shuchu(int m,char n);
    void bianli(int num);
    int main()
    {
        int n,tem;
        int cnt=0;//计数器一开始一定要初始化!!! 
        int ge;
        printf("请输入一个1000以内的正整数:\n");
        scanf("%d",&n) ;
        tem=n;
        do{
            tem/=10;
            cnt++;
        }while(tem!=0);//几位数-tem=0
        printf("输入的数是%d位数\n",cnt);
        if(cnt==3)
        {
            shuchu(n/100,'B');
            shuchu(n%100/10,'S');
            ge=n%100%10;
            bianli(ge);
        }
        else if(cnt==2){
            shuchu(n/10,'S');
            ge=n%10;
            bianli(ge);
        }
        else if(cnt==1){
            bianli(n);
        }
//        int a=2;
//        char b='B';//字符的定义!!!单引号!! 
//        shuchu(a,b);
    }
    void shuchu(int m,char n)
    {
        int i;
        for(i=1;i<=m;i++)
        {
            printf("%c",n);
        }
    }
    void bianli(int num)
    {
        int i;
        for(i=1;i<=num;i++){
            printf("%d",i);
        } 
    }
  • cnt计数器一定要注意初始化!!!没有cnt=0,系统默认为1了。。。

do{
tem/=10;
cnt++;
}while(tem!=0);//几位数-tem=0
  • 字符的定义!!!单引号!!

  • char b='B';//

07-2. A+B和C

给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。

输入格式:

输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。

输出格式:

对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。

输入样例:

4

1 2 3

2 3 4

2147483647 0 2147483646

0 -2147483648 -2147483647

输出样例:

Case #1: false

Case #2: true

Case #3: true

Case #4: false

//给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。
//其实就是int 
#include<stdio.h>
    void compute(int n, int i ,int j ,int k) ;
    int main()
    {
        int n,i;
        int a,b,c;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            scanf("%d %d %d",&a,&b,&c);
            compute(i,a,b,c);
        }
    }
    void compute(int n, int i ,int j ,int k)
    {
        if(i+j>k)
        {
            printf("Case #%d: true\n",n);
        }
        else{
            printf("Case #%d: false\n",n);
        }
    }

07-3. 数素数

令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。

输入格式:

输入在一行中给出M和N,其间以空格分隔。

输出格式:

输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入样例:

5 27

输出样例:

11 13 17 19 23 29 31 37 41 43

47 53 59 61 67 71 73 79 83 89

97 101 103

//n个素数之间 输出第5个到第27个之间的
#include <stdio.h>
    void sushu(int a,int b); 
    int main()
    {
        int m,n;
        scanf("%d %d",&m ,&n);
        sushu(m,n);
     } 
     void sushu(int a,int b)
     {
         int i,j;
         int cnt=0;
         int sig,p=0;
         for(i=2;i<=10000;i++){//判断是不是素数 
             sig=1;//注意sig每次都要变回来 
             for(j=2;j<i;j++)
            {
                 if(i%j==0)
                 {
                     sig=0;
                     continue;
                 }
            }
            if(sig==1){
                cnt++; //每个素数都计数一次 
                if (cnt<=b&&cnt>=a){//输出区间内的素数 
                    printf("%d",i);
                    p++;//每10个数字占1行,其间以空格分隔,
                    if(p%10!=0){
                        printf(" ");
                    }
                    else printf("\n");//但行末不得有多余空格。
                }
            
            }
         }
      } 
  • 素数判断,注意标志变量值的变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值