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

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

    

    

转载于:https://www.cnblogs.com/zhaoy-shine/p/10819297.html

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

  1. OC--有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 倒序输出字符串...

    有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 1 NSInteger num=123456789; 2 NSString *str=[[NSStri ...

  2. n^n的末位数字(快速幂)

    给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字. Input 一个数N(1 <= N <= 10^9) Output 输出N^N的末位数字 Input示例 13 Outpu ...

  3. 51Nod——1004 n^n的末位数字

    基准时间限制:1 秒 空间限制:131072 KB 给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字. Input 一个数N(1 <= N <= 10^9) Output 输 ...

  4. 51Nod-1004 n^n的末位数字【快速模幂】

    1004 n^n的末位数字 题目来源:Author Ignatius.L (Hdu 1061) 基准时间限制:1秒 空间限制:131072KB 分值:5难度:1级算法题 给出一个整数N,输出N^N(N ...

  5. C语言 正序分解整数

    C语言 正序分解整数 输入一个非负整数 , 正序输出它的每一位数字 输入 13526 输出 1 3 5 2 6 分析思路: 需要正序输出每一位数字 ,我们可以先把数逆序一遍,再逆序输出每一位数字. 这 ...

  6. 正序分解整数C语言实现

    我们都知道,逆序分解一个整数相当简单 #include<stdio.h> int main() {//逆序分解整数 并输出 int n=0;printf("请输入您要分解的整数: ...

  7. 陈春花:一定要让顶上的人有末位淘汰,让基层活不好是错的

    转载于 : https://t.qianzhan.com/daka/detail/171211-a67b0627.html 本文转载自微信公众号:中国企业家杂志(ID: iceo-com-cn),记者 ...

  8. C语言有符号整数最小值,16位带符号整数为什么是

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:16位带符号整数为什么是回答:剩下15位二进制数的最大值是每一位数都是1的情况,即2^15-1=326.326化成二进制为1000 ...

  9. 非整数倍数数据位宽转换8to12

    非整数倍数数据位宽转换8to12 题目描述 实现数据位宽转换电路,实现8bit数据输入转换为12bit数据输出.其中,先到的数据应置于输出的高bit位. 电路的接口如下图所示.valid_in用来指示 ...

最新文章

  1. 【安装】Mysql在Linux上安装
  2. JavaScript 高级技巧
  3. 纯c语言贪吃蛇,纯C语言贪吃蛇 求助
  4. 中国杀菌剂行业需求趋势与投资战略规划研究报告2021-2027年版
  5. 1.2.3 TCP/PI参考模型(应用层、传输层、网际层、网络接口层)、五层参考模型(应用层、传输层、网络层、数据链路层、物理层)、OSI与TCP/IP参考模型比较
  6. POJ - 1655 Balancing Act(树的重心)
  7. Linux:查看内存和CPU信息
  8. java long的包,long longValue()
  9. hash函数MurmurHash
  10. jquery扩展提示框
  11. 追求--MarsCoara
  12. Python练手项目之微信机器人、恢复被撤回的微信消息
  13. BDTC 2016 出品人阵容曝光!附首批邀请嘉宾名单
  14. Mac连局域网打印机
  15. LaTeX 多图 排列
  16. kon-boot启动盘测试
  17. 2021爱分析·云计算趋势报告——支撑数字化转型,企业云平台建设进入新阶段
  18. linux下github上传文件,linux下将本地文件上传到github中?
  19. 西游记中神兽谛听的能力 这款小程序也有
  20. ARC101E Ribbons on Tree 容斥原理+dp

热门文章

  1. HTML——meta
  2. 解决mysql报错Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock
  3. [设计模式][c++]状态切换模式
  4. CocoaPods的使用
  5. 问题与解答 [Questions Answers]
  6. [IE编程相关]之一:客户端键盘响应事件分析
  7. autossh配置socks代理
  8. u-boot.lds文件详解
  9. 3 当某个应用的CPU使用达到100%,该怎么办?
  10. Tomcat多实例和负载均衡