C语言实现数字分离(附带源码)

桐桐上幼儿园了,学会了 1 位数字的加法运算,妈妈想考核桐桐的运算能力,于是每次给出一个四位数的整数,让桐桐计算出各位上的数字的和。妈妈想请你帮她写一个程序,能够随机产生一个四位数的整数,同时给出其各位上的数字的和,这样她就能够一边做自己的事,一边考核桐桐了。

问题分析

输入:随机产生一个四位数整数。

输出:输出整数和其各位数字的和。

1) 首先用 C语言的数学库函数 rand( ) 产生一个随机的四位数整数。

rand( ) 函数能够生成在 0~RAND_MAX 的任意整数。rand( ) 函数和常量 RAND_MAX 均在库文件 stdlib.h 中定义,一般 RAND_MAX 的默认值为最大的 int 整型数 32767。要生成 a~b 的任意整数(包含 a 和 b),可以用以下方式:
a + rand( ) % (b + 1 - a);           //rand( ) % (b + 1 - a) 的最大值是 b + 1,最小值是 0
因而,要生成任意四位整数就可以用 1000+rand( )%9000 实现。

事实上,rand( ) 函数产生的是一个伪随机数,重复调用该函数所产生的随机数字是相同的。要想每次执行产生不同的随机数,就需要用 srand( ) 函数进行随机初始化。

随机初始化函数 srand( ) 可以设置随机数生成器的种子,不同的种子将产生不同的随机数。在程序运行过程中时间是一直变化的,所以我们可以借助 time.h 库中的 time(NULL) 函数返回计算机当前的时间数,把它作为随机数生成器的种子,从而在每次执行 rand( ) 函数时产生一个不同的随机数。

将当前时间设置为随机数生成器种子的代码如下:
srand(time(NULL));

2) 拆分这个四位整数,获得其各位上的数字。

拆分一个数可以利用%/运算符实现。假设 a、b、c、d 分别表示四位整数 number 的个、十、百、千位上的数,则它们的值可以分别表示为:
a = number % 10;               //个位数
b = bumber / 10 % 10           //十位数
c = number / 100 % 10          //百位数
d = number / 1000              //千位数

图 1 展示了从一个四位数中拆分出其各位上的数字的过程。

数字分离——拆分四位整数获得各位上的数字
图 1:数字分离——拆分四位整数获得各位上的数字

算法描述

数字分离流程图

代码清单 1:C语言程序源代码(数字分离)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( )
{
    system("color 70");
    int number,a,b,c,d,s;
    srand(time(NULL));
    number = rand()%9000+1000;
    a = number % 10;
    b = number / 10 % 10;
    c = number / 100 % 10;
    d = number / 1000;
    s = a + b + c + d;
    printf("随机生成四位整数:%d\n",number);
    printf("各位数字的和:%d + %d + %d + %d = %d\n",d,c,b,a,s);
    system("pause");
    return 0;
} 

运行结果:

随机生成四位整数:9493
各位数字的和:9 + 4 + 9 + 3 = 25