杭电 Digital Roots

本文介绍了一种计算数字根的方法,即通过不断累加整数的各个位数直至得到一位数的过程。并通过一个C语言示例程序展示了如何实现这一过程。

Problem Description
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.
 

Input
The input file will contain a list of positive integers, one per line. The end of the input will be indicated by an integer value of zero.
 

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

Sample Input
  
24 39 0
 

Sample Output
  
6 3
 

Source
 

Recommend
We have carefully selected several similar problems for you:   1017  1016  1019  1014  1010 
题意:本题要求的是给出一个整数,求该整数的各位数字之和;
分析:本题需注意的是,体重并没给出整数的位数,故需要很容易想到字符数组,然后用一循环即可解出;
代码:

#include<stdio.h>
#include<string.h>
int fun(int n)
{
 int num=0,t,s;
  while(n!=0)
    {
  t=n%10;
  num+=t;
  n=n/10;
 }
   return num;
}
int main()
{
 int m,i,j,p;
 int sum;
   int a[100000];
   char a1[100000];
 while(~scanf("%s",a1))
 {
  if(strcmp(a1,"0")==0)
  break;
  p=strlen(a1);
   for(i=0,j=p-1;j>=0;i++,j--)
    a[j]=a1[i]-'0';
    for(i=0,sum=0;i<p;i++)
    sum+=a[i];
     while(1)
     {
      m=fun(sum);
      if(m<10)
      break;
      sum=m;
     }
 
     printf("%d\n",m);
 }
 return 0;
}



### GC Roots 在垃圾回收中的作用和定义 在 Java 虚拟机(JVM)的垃圾回收机制中,GC Roots 是用于判断对象是否为可回收对象的关键起点。通过可达性分析算法(Reachability Analysis),从这些根节点出发,递归遍历所有引用链,未被访问到的对象将被视为不可达,并最终被标记为可回收对象[^1]。 #### 定义 GC Roots 是一组必须活跃的引用,它们作为垃圾回收器进行可达性分析的起始点。这些引用通常包括以下几种类型: - **虚拟机栈中引用的对象**:例如,正在执行的方法中所使用的局部变量或参数。 - **方法区中的类静态属性引用的对象**:如 `static` 修饰的字段。 - **方法区中的常量引用**:如 `final static` 常量。 - **本地方法栈中引用的对象**:例如,通过 JNI(Java Native Interface)创建的对象引用。 - **被同步锁持有的对象**:如被 `synchronized` 关键字引用的对象。 这些对象不会被垃圾回收器回收,因为它们被认为是程序运行过程中必须保持存活的起点[^1]。 #### 作用 GC Roots 的主要作用是帮助 JVM 快速确定哪些对象是“存活”的,从而避免错误地回收仍然被使用中的对象。其核心机制如下: 1. **可达性分析的起点**:JVM 从 GC Roots 开始,逐层向下扫描,构建出所有可达对象的图谱。未被扫描到的对象则被判定为不可达,进而被标记为垃圾。 2. **防止内存泄漏**:通过确保关键对象始终被引用,GC Roots 可以有效防止某些类型的内存泄漏问题,例如缓存未正确释放的情况。 3. **支持复杂的引用结构管理**:现代应用程序中存在大量弱引用(`WeakHashMap`)、软引用(`SoftReference`)等特殊引用类型,GC Roots 提供了统一的起点来处理这些引用的可达性状态[^2]。 #### 示例代码 下面是一个简单的示例,演示如何创建一个强引用,该引用可能成为 GC Roots 的一部分: ```java public class GCRootExample { private static Object rootObject; // 静态字段属于 GC Roots public static void main(String[] args) { Object localObject = new Object(); // 局部变量引用也属于 GC Roots rootObject = localObject; } } ``` 在这个例子中,`localObject` 是一个局部变量,它在 `main` 方法的执行期间属于 GC Roots。而 `rootObject` 是一个静态字段,同样属于 GC Roots,即使 `main` 方法执行完毕后,只要 `rootObject` 仍持有引用,对象就不会被回收。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值