C:如何分解整数(从末位往前取以及从首位往后取)

  主要都是通过整除与取余来处理

1.从末位往前取

#include<stdio.h>
int main()
{
    int num;
    int num_1,num_2,num_3;
    scanf("%d",&num);
    num_1 = (num/1) % 10;
    num_2 = (num/10) % 10;
    num_3 = (num/100) % 10;
    printf("%d",num_1 * 100 + num_2 * 10 + num_3 * 1);
}

  在上述代码中,num_1表示个位,num_2表示十位,num_3表示百位,分别通过(num/1) % 10,(num/10) % 10以及(num/100) % 10来获得。

#include <math.h>
int main()
{
    int sum = 0;
    int number,last,cout = 1;
    scanf("%d",&number);
    while(number > 0)
    {
        last = number % 10;
        if (last % 2 == (cout % 2))
        {
            sum += pow(2,cout-1);

            cout ++;
        }
        else
        {
            sum += 0;
            cout ++;
        }
        number = number / 10;
    }
    printf("%d",sum);
}
  在上述的代码中,主要通过while(number > 0)以及number % 10和number/10来完成循环取值的运算

 

2.从首位往后取。这里用的是念数字的例子

int main()
{
    int abs_num,num;
    int digit = 0;
    int deal_num;
    int number;
    scanf("%d",&num);
    abs_num = abs(num);
    deal_num = abs_num;
    // 记住考虑零的情况
    if (num == 0)
    {
        printf("ling");
    }

    while(deal_num > 0)
    {
        deal_num = deal_num / 10;
        digit += 1;
    }
    for (digit; digit>0; digit--)
    {
        int num_10 = 1;
        int digit_1 = 0; // digit_1用于内层循环
        digit_1 = digit;
        while(digit_1-1 > 0)
        {
            num_10 *= 10;
            digit_1 = digit_1 - 1;
        }
        number = abs_num / num_10;
        abs_num = abs_num - num_10 * number;


        //digit表示位数
        /*此时要解决的问题
            1.得到首个数字 number
            2.将首数字删去,得到后面的值
          目前有num和digit 数字和位数,如何处理?
            1.得到首数字:number = num / (10 * 10)
            2.去掉首数字: num = 439 digit = 3,得到num = num - 10 * 10 * number 得到num = 39(3-1个digit)
           所以得到 10*10最为重要
        */

         //现在可以得到4 3 9,最后要解决的是最后一位没有空格的输出问题
         if (num < 0)
            printf("fu ");
            num = abs(num); //只希望触发一次,触发后,直接将num变为绝对值,此时>0
         if (digit > 1)
         {
             switch(number)
             {
             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;
             }
         }
         else
         {
            switch(number)
             {
             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;
             }
         }

    }
}
  这里的核心思路

    假设num为439

            1.得到首数字:number = num / (10 * 10)
            2.去掉首数字: num = 439 digit = 3,得到num = num - 10 * 10 * number 得到num = 39(3-1个digit)

       那么就引出如何得到digit,这里的方法是每次num/10,digit++,一直循环至num == 0

    

    

posted on 2019-05-06 14:09  zhaoy_shine  阅读(555)  评论(0编辑  收藏  举报

导航