计算机考研复试--牛客网--C语言练习--Day4

  1. 1 背景
  2. 2 题目:Digital Roots
    1. 题目描述
    2. 输入描述:
    3. 输出描述:
    4. 示例1
      1. 输入
      2. 输出
    5. 代码
  3. 3 分析

1 背景

第4天的题目总的来说不是特别难,核心就是一个求数字数值位的和的运算

2 题目:Digital Roots

题目描述

The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the process is repeated. This is continued as long as necessary to obtain a single digit. For example, consider the positive integer 24. Adding the 2 and the 4 yields a value of 6. Since 6 is a single digit, 6 is the digital root of 24. Now consider the positive integer 39. Adding the 3 and the 9 yields 12. Since 12 is not a single digit, the process must be repeated. Adding the 1 and the 2 yeilds 3, a single digit and also the digital root of 39.

意思大致是:
正整数的数字根是通过对整数的数字求和得到的。如果结果值是单个数字,则该数字是数字根。如果结果值包含两个或两个以上的数字,则将这些数字相加并重复该过程。只要有必要获得一个数字,就可以继续这样做。例如,考虑正整数24。将2和4相加得到值6。因为6是一个数字,所以6是24的数字根。现在考虑正整数39。加上3和9得到12。因为12不是一个数字,所以必须重复这个过程。将1和2相加得到3,一个数字,还有39的数字根。

输入描述:

The input file will contain a list of positive integers, one per line.
The integer may consist of a large number of digits.

意思大致是:
输入文件将包含一个正整数列表,每行一个。
整数可以由大量数字组成。

输出描述:

For each integer in the input, output its digital root on a separate line of the output.

意思大致是:
对于输入中的每个整数,在输出的单独行上输出其数字根。

示例1

输入

24
39
0

输出

6
3

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int DigitalRoot(int k);
int main()
{
int num;
while(scanf("%d", &num) != EOF) { //输入待计算数字根的数
int result = num;
while(1) {
result = DigitalRoot(result); //计算数字根
if(result >= 1 && result <= 9) //满足条件就退出循环
break;
}
printf("%d\n", result);
}
}
int DigitalRoot(int k) {
int sum = 0;
while(k != 0) {
sum += k % 10; //计算数字位的和
k /= 10; //计算低一位的数值
}
return sum;
}

3 分析

  • 今天题目的难点是求一个数字的各数值位的数字之和,可以利用一个循环不断进行除法加法求模运算进行

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。

×

喜欢就点赞,疼爱就打赏