对任意一个自然数N0,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N1;然后对N1重复这种操作,可以产生新自然数N2;……多次重复这种操作,运算结果最终会得到一个固定不变的数Nk,就像掉入一个数字“陷阱”。
本题要求对输入的自然数,给出其掉入“陷阱”的过程。
输入格式:
在一行内给出一个自然数N0(N0<30000)。
输出格式:
对于输入的N0,逐行输出其掉入陷阱的步骤。第i行描述N掉入陷阱的第i步,格式为: i:Ni (i≥1)。当某一步得到的自然数结果Nk(k≥1)与上一步Nk−1相同时,停止输出。
输入样例:
5
输出样例:
1:16
2:22
3:13
4:13
自定义的函数可以放在代码的最开始,也可以放在最后,格式有所不同,注意观察下面两段代码不同的地方(开始和结尾)。一般来说放在最后有利于阅读。
#include<stdio.h>
//自定义一个sum函数来求任意数的各位数之和,以便后续调用这个函数
int sum(int n)
{
int sum=0;
while(n>0){
sum=sum+n%10;
n=n/10;
}
return sum;
}
int main()
{
int N;
scanf("%d", &N); //输入一个自然数N
int next=sum(N)*3+1; //第一次调用sum函数
int i=1; //用于计数
printf("%d:%d\n", i,next);
while(next!=N){
N=next;
next=sum(N)*3+1; //sum函数在循环中被多次调用
i++;
printf("%d:%d\n", i,next);
}
return 0;
}
#include<stdio.h>
int sum(int n); //这是sum函数的声明,比“定义”多了一个分号
int main()
{
int N;
scanf("%d", &N); //输入一个自然数N
int next=sum(N)*3+1; //第一次调用sum函数
int i=1; //用于计数
printf("%d:%d\n", i,next);
while(next!=N){
N=next;
next=sum(N)*3+1; //sum函数在循环中被多次调用
i++;
printf("%d:%d\n", i,next);
}
return 0;
}
int sum(int n) //这是sum函数的定义
{
int sum=0;
while(n>0){
sum=sum+n%10;
n=n/10;
}
return sum;
}
有任何疑问可以给我评论、留言。