c语言 求整数位分解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 求整数位分解相关的知识,希望对你有一定的参考价值。

要求
1.
对于一个100-999之间的整数,分别输出它的每一位数字。
2.
它的百位、十位和个位,中间用空格分隔开

参考技术A #include<stdio.h>
void split(int a) 
    //输出百位
    printf("%d", a/100);
    printf(" ");
    
    //输出十位
    printf("%d", (a%100)/10);
    printf(" ");
    
    //输出个位
    printf("%d", a%10);
    
    

int main() 
    int a;
    scanf("%d", &a);
    //判断输入数字的合法性。
    if (a < 100 || a >999) 
        printf("error number!");
        return 0;
    
    //数字分割
    split(a);
    return 0;

参考技术B #include <stdio.h>
void main( )
int a,b,c,d;
scanf("%d",&a);
b= a/100;
c= (a%100) /10;
d=a%10;
printf("%d %d %d",b,c,d);
本回答被提问者采纳

HDU-6156题解(数位DP)

一、题目

  技术分享图片

二、思路

  1、这是很明显的数位DP;

  2、和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作。但是,不管多少进制,原理都是一样的;

  3、这里有个小坑,题目中说大于10的数用A、B、C、……、Z表示,那都是骗人的。使用数位DP分解给定上界的每一位数后,得到没一位的就是在给定进制下的该位的权值,压根不需要在数字、字母之间转来转去,纯数字娱乐;

  4、比较直观的想法是:

    (1)枚举给定范围内的每一个进制;

    (2)计算在b进制下的回文数个数,然后即可得出在b进制下的和;

    (3)累加上面的所有和,得出最终答案。

  5、在4(2)中,利用数位DP计算在b进制下的回文数个数,需要记忆化。如何记忆化,怎么表示状态,这个是本题的关键所在。首先,当前搜索状态在数位中的位置pos,进制b,这个是确定状态的两个依据,不难想到。接下来,先把dp数组的设计放下来,看看dfs函数。既然与回文数有关,那自然,回文数的起始位置应该知道,因为前导0是不参与回文计算的。还有一点非常关键:因为要判断一个数是否回文,就必须从端点到中间扫描整个数字序列,而如果要这么做,那我们的记忆化就玩完了,每个数都判断一下,就变成暴力枚举了。所以,要让判断在搜索过程中完成。

 

以上是关于c语言 求整数位分解的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程 数位排序问题 急急急急急急急急急急急急急急急急急急急

C语言,质因数分解

c语言 分解质因数

求一个C语言程序题:编写一个函数SWAP()实现交换两个数位置的功能

c语言一个数分解成独立的数字

C语言 小数位极多如何处理,代码如下