对任意一个自然数N
0
,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N
1
;然后对N
1
重复这种操作,可以产生新自然数N
2
;……多次重复这种操作,运算结果最终会得到一个固定不变的数N
k
,就像掉入一个数字“陷阱”。
本题要求对输入的自然数,给出其掉入“陷阱”的过程。
# include<stdio.h>
int main()
{
int sum=0;
int i=0;
int N[100]={};
scanf("%d",&N[0]);
while(1){
while(N[i]!=0){
sum+=N[i]%10;
N[i]/=10;
}
i++;
N[i]=sum*3+1;
printf("%d:%d\n",i,N[i]);
sum=0;
if(N[i]==N[i-1]){
break;
}
}
return 0;
}
第9行的while(1)是死循环,你没有结束循环的条件
代码修改如下:
#include<stdio.h>
int main()
{
int sum = 0;
int i = 0;
int n,t;
scanf("%d", &n);
while (1) {
t = n;
while (n != 0) {
sum += n % 10;
n /= 10;
}
i++;
n = sum * 3 + 1;
printf("%d:%d\n", i, n);
sum = 0;
if (n == t) {
break;
}
}
return 0;
}
#include<stdio.h>
int main()
{
int sum = 0;
int i = 0;
int N[100] = {};
scanf("%d", &N[0]);
while (1) {
int nTmp = N[i];//加一个临时变量 要不然值会被覆盖
while (nTmp != 0) {
sum += nTmp % 10;//原来会被覆盖
nTmp /= 10;
}
i++;
N[i] = sum * 3 + 1;
printf("%d:%d\n", i, N[i]);
sum = 0;
if (N[i] == N[i - 1]) {
break;
}
}
return 0;
}