`
superwulei
  • 浏览: 108092 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于一个分离1~32767之间整数的一个C程序的研究

阅读更多

题目:开发一个程序,编写一个函数,输入1~32767之间的整数,并把这个整数显示为一些列数字,每组数字都是用两个空格分开。例如,整数4562应该显示为:
4  5  6  2

华罗庚曾经说过,研究一个问题要从简单的入手,然后再从简单的向复杂问题入手。于是我就用一个特殊的例子下手,比如用1234这个数,最后输出的结果应该是1 2 3  4。怎么才能得到这个结果呢?使用除法的商和余数可以得到正确的结果。如下表
次数  被除数         除数          商       余数 
1      1234    /    1000    =    1......234
2        234    /    100      =   2......   34
3          34    /    10       =    3......    4
4            4    /    1         =    4......       0
可以看到前一次的余数作为了下一次的被除数,而商就是我们要输出的部分。于是可以得到算法:
1.被除数为1234,除数为1000;
2.输出被除数/除数的商和两个空格;
3.把被除数/除数的余数给被除数;
4.把除数/10的商给除数;
5.重复步骤2和步骤4,直到被除数为0;

非常荒唐的是,我的算法只能用于这个特殊的例子。以上的被除数是四位数所以我们才除以1000,如果是五位数我们就应该除以10000,三位数除以100,两位数除以10,1位数除以1。规律是除以10的n-1次方(n是用户输入整数的位数)但是如何确定用户输入的是位数呢?问题现在又转移到求位数上来了。这次还用1234这个整数作为切入的例子。1234是四位数,如何确定?
可以使用一个循环和一个计数器。
1234每次除以10,再将所得的商赋值给新的被除数。计数器记录循环的次数(每次循环自身累加1)
这样1234/10=123, 123/10=12, 12/10=1, 1/10=0, 直到商为零的时候循环结束,一共除了4次,这个4就是位数。
这是通用的。如果是五位数那么会除以5次,5就是位数,其他的位数是同样的道理。

返回到我的那个荒唐的算法中,让我们修改一下。
1. 求得用户输入数字(被除数)的位数;
2. 输出  被除数 / 10的[位数-1]次方的商和两个空格;
3. 步骤二中的余数作为被除数;
4. 把位数-1的值给位数;
5. 重复步骤2到步骤4,直到位数为0

以下是我编写的代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 #include < stdio.h >
 2 #include < math.h >
 3
 4 void  divideNumber(  int  number );
 5
 6 main()
 7 {
 8      int  num;
 9     printf(  " Enter a integer: "  );
10     scanf(  " %d " & num );
11     divideNumber( num );
12
13      return   0 ;
14 }

15
16 /**/ /*  show the divided numbers  */
17 void  divideNumber(  int  number ) {
18      int  counter  =   1 //  record the digits.
19      int  temp;
20
21      // How many digit in number?
22     temp  =  number;
23      while  ( temp  /   10  )
24      {
25         temp  /=   10 ;
26         counter ++ ;
27     }
//  counter has recorded the digits.
28
29      while  ( counter )
30      {
31         printf(  " %d   " , number  /  ( int )pow(  10 , counter  -   1  ) );
32         number  %=  ( int )pow(  10 , counter  -   1  );
33         counter -- ;
34     }

35     printf(  " \n "  );
36 }


后记:今天一个同学的同学想让我帮忙看看他编写的连连看程序有什么问题,给我的只有一大堆代码。这让我无从下手,我想看的是他的设计思想和算法,我认为这比代码要重要的多。因为在我看来如果有了设计思想和算法,任何编程语言就都无所谓了(就是说哪一种语言都可以编写出来)。这虽然是一道小题,但是我还是想强调一下设计思想和算法的重要性。

分享到:
评论

相关推荐

    单片机C语言程序整数分离

    - **位移操作**:可以通过位移操作来分离整数的高位和低位。例如,对于16位整数`num`,可以使用`num &gt;&gt; 8`得到高八位,`num & 0xFF`得到低八位。 - **位掩码**:通过与特定位掩码进行按位与操作,可以提取或设置特...

    正整数拆分C语言程序

    这个题目要求我们编写一个C语言程序,该程序能够输出一个正整数的所有可能拆分数,并计算出拆分数的总数。这里我们将深入探讨这个问题,以及如何通过C语言实现。 首先,我们需要理解正整数拆分的概念。给定一个正...

    超长整数处理 C语言编写

    本题目要求用C语言实现一个程序,该程序能够处理一个超过20位的带符号整数。具体任务是将该整数中的奇数位与偶数位分别提取出来,并按照奇数位在前、偶数位在后的顺序重新组合成一个新的整数。最终结果需显示在屏幕...

    基于visual Studio2013解决C语言竞赛题之4倍数

    在本题中,我们面临的是一个数学问题,它与编程紧密相关,特别是在使用Visual Studio 2013的C语言环境中。题目要求我们找到一个四位数,它的各位数字互不相同,满足经过特定的数字位置交换后,原数是新数的四倍。这...

    C语言成序设计__实现人民币小写金额与大写金额的转换

    我们可以定义两个数组,一个是中文数字数组,另一个是单位数组。然后,我们可以使用循环来提取小写金额的每一位数字,并将其转换为对应的大写金额数字。最后,我们可以使用 printf 函数将结果输出出来。 在编程实现...

    基本功能:设学生姓名及成绩已分别存入指定数据存储单元,统计成绩分布的人数:A级(90~100),B级(80~89),C级(70~79),D级(60~69),E级(0~59)。并按顺序显示全班成绩,及统计信息。要求界面友好。 增强功能:学生姓名及成绩根据屏幕提示由键盘录入再存入数据存储单元。

    - **resultDB** 定义了一个结果缓冲区,用于存储统计结果。 - **SCOREDW** 定义了一个数组,用于存储用户的输入成绩。 - 其他如 **S5~S10** 等变量,则用于记录不同成绩段的人数统计。 2. **程序流程控制**: -...

    输入一个浮点数,判断小数有几位——C语言代码

    C语言提供了`scanf`函数来读取用户输入,可以这样获取一个浮点数: ```c #include int main() { float num; printf("请输入一个浮点数:"); scanf("%f", &num); // 进行后续处理... } ``` 要计算小数部分的...

    简单C语言程序的例子.doc

    以上给出的文档包含了一些简单的C语言程序示例,这些示例涵盖了基础的输入输出、函数调用、条件语句、循环以及数学计算等多个方面。以下是这些程序及其对应知识点的详细解释: 1. **字符串输出**: - 第一个程序...

    关于魔方阵的解法 c语言课程设计

    在本文中,我们还提供了一个C语言程序来实现魔方阵的解法。该程序首先输入需要的数组维数n,然后构造出I和J方阵,最后输出魔方阵B。该程序可以帮助学生更好地理解魔方阵的解法,并且可以应用于实际问题中。 魔方阵...

    c代码-9.键盘输入一个三位数的正整数,其个位与百位相加若等于十位上的数字则输出"Yes",否则输出"No"。例如,输入"176",则输出"Yes"。输入"258",则输出"No"

    在这个C语言编程问题中,我们需要编写一段代码来接收用户通过键盘输入的一个三位正整数,然后检查这个数的个位数和百位数之和是否等于它的十位数。如果相等,则程序输出"Yes",否则输出"No"。这个问题主要涉及以下几...

    c语言试题100道.pdf

    5. 第五个试题要求编写一个程序,输入一个三位整数,正确地分离出个位、十位和百位,并分别在屏幕上输出。这个试题考察了C语言的字符串处理和数字操作。 6. 第六个试题要求编写一个函数,统计一个输入的整型数的...

    C语言程序设计实验报告(四)

    在本篇"C语言程序设计实验报告(四)"中,主要涵盖了两个实验题目,都是关于C语言函数的应用。首先,让我们详细分析每个题目及其解决方法。 **题目1**:删除整型数组中指定的数 这个题目要求编写一个名为`del`的...

    实用c语言程序设计三种基本结构程序设计详解PPT学习教案.pptx

    【例1】展示了顺序结构的一个简单应用,它定义并初始化了不同类型的变量,如字符、整型、无符号整型、长整型、浮点型和双精度浮点型,并使用`printf`函数进行输出。输出格式化字符串与变量的配合使用,展示了C语言...

    水仙花数c语言程序水仙花数c语言程序

    在这个程序中,`isNarcissistic` 函数用于检查一个数是否是水仙花数,而 `main` 函数则遍历100到999的整数,调用 `isNarcissistic` 函数,并打印出所有的水仙花数。 在C语言中,`#include &lt;stdio.h&gt;` 是预处理指令...

    水仙花数c语言程序 zip

    这个"水仙花数c语言程序"的压缩包可能包含了实现上述功能的源代码文件,文件名为`7.6-main`,这通常表示一个版本控制下的主程序文件。在实际开发中,这样的命名方式有助于跟踪和管理代码的不同版本。你可以解压这个...

    c语言循环结构的程序

    ##### 题目3:编写一个程序,求所有的三位正整数中各个数字之和为7的倍数的数量 **需求描述**:编写程序,找出100至999之间,各个数字之和为7的倍数的所有整数数量。 **知识点**: - 使用循环遍历三位数。 - 分离并...

    顺序结构程序设计-C语言程序实验报告.docx

    - 输出一个3位数的每一位数字,需要正确处理整数的位值转换。 - 分离输入的带有两位小数的实数,分别输出整数和小数部分。 - 使用`getchar`和`putchar`处理字符输入和输出。 思考题进一步考察了对程序修改的理解...

    C语言程序设计实验作业

    在C语言程序设计中,实验作业是学习编程基础的重要环节,它可以帮助学生加深对语言特性的理解并提高实际编程能力。以下是一些基于题目描述的知识点: 1. **三角形判断**: - 这个任务涉及到三角形的性质和条件判断...

    水仙花数c语言程序.txt

    例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。这个概念可以扩展到任意数的次方,比如四叶数就是每个位上数字的四次方和等于该数本身。在给出的C语言程序中,我们将寻找范围内的所有三位数的水仙花数。 ...

Global site tag (gtag.js) - Google Analytics