这个C的这段代码有什么问题要乘以数字并找出它重复多少次直到最后的数字是一个数字
What is the problem with this code of this C to multiply digits and finding out how many times it repeats until the final number is a single digit
我无法获得结果。我现在写的程序是每个数字相乘得到下一个数,再下一个数,直到变成个位数。
例如,
77 - 49 - 36 - 18 - 8 : repeats 4 times
679 - 378 - 168 - 48 - 32 - 6 : repeats 5 times
我的代码的问题是numbers that process %d times\n
后结果出不来
我猜 output()
是问题..但我真的一直在寻找错误。
#include <stdio.h>
#pragma warning (disable : 4996)
void inputUInt(int*, int*, int*);
void myFlush();
int transNumber(int);
void output(int, int, int);
int main()
{
int start, end, gNum; // start number, end number, how many times until the number becomes a single digit
inputUInt(&start, &end, &gNum);
output(start, end, gNum);
return 0;
}
void inputUInt(int* startp, int* endp, int* gNump)
{
while (1) {
printf("#start number : ");
scanf("%d", startp);
if (*startp >= 100 && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
while (1) {
printf("#last number : ");
scanf("%d", endp);
if (*endp <= 10000 && *endp > * startp && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
while (1) {
printf("# gNum : ");
scanf("%d", gNump);
if (*gNump > 0 && *gNump <= 10 && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
return;
}
void myFlush()
{
while (getchar() != '\n') {
;
}
return;
}
int transNumber(int num)
{
if (num >= 1000) {
num = (num / 1000) * ((num % 1000) / 100) * ((num % 100) / 10) * ((num % 10) / 1);
}
else if (num >= 100) {
num = (num / 100) * ((num % 100) / 10) * ((num % 10) / 1);
}
else if (num >= 10) {
num = (num / 10) * ((num % 10) / 1);
}
else { ; }
return num;
}
void output(int start, int end, int gNum)
{
int i, num, transN, count = 0, gNumTotal = 0;
printf("numbers that process %d times\n", gNum);
for (i = start; i <= end; i++) {
num = i;
transN = transNumber(num);
while (transN > 10) {
count++;
}
}
if (count == gNum) {
printf("%d\n", i);
gNumTotal++;
}
else { ; }
printf("total numbers : %d numbers", gNumTotal);
return;
}
你必须在循环中反复调用transNumber()
。否则,transN
永远不会改变,因此循环永远不会结束。
打印 i
的代码需要在 for
循环内,并且需要在每个 while
之前将 count
重置回 0
循环。
for (i = start; i <= end; i++) {
num = i;
count = 0;
while (num > 10) {
num = transNumber(num);
count++;
}
if (count == gNum) {
printf("%d\n", i);
gNumTotal++;
}
}
你不需要:
else { ; }
在每个 if
之后。如果条件为 false 时不需要做任何事情,则将其保留。
我无法获得结果。我现在写的程序是每个数字相乘得到下一个数,再下一个数,直到变成个位数。
例如,
77 - 49 - 36 - 18 - 8 : repeats 4 times
679 - 378 - 168 - 48 - 32 - 6 : repeats 5 times
我的代码的问题是numbers that process %d times\n
我猜 output()
是问题..但我真的一直在寻找错误。
#include <stdio.h>
#pragma warning (disable : 4996)
void inputUInt(int*, int*, int*);
void myFlush();
int transNumber(int);
void output(int, int, int);
int main()
{
int start, end, gNum; // start number, end number, how many times until the number becomes a single digit
inputUInt(&start, &end, &gNum);
output(start, end, gNum);
return 0;
}
void inputUInt(int* startp, int* endp, int* gNump)
{
while (1) {
printf("#start number : ");
scanf("%d", startp);
if (*startp >= 100 && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
while (1) {
printf("#last number : ");
scanf("%d", endp);
if (*endp <= 10000 && *endp > * startp && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
while (1) {
printf("# gNum : ");
scanf("%d", gNump);
if (*gNump > 0 && *gNump <= 10 && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
return;
}
void myFlush()
{
while (getchar() != '\n') {
;
}
return;
}
int transNumber(int num)
{
if (num >= 1000) {
num = (num / 1000) * ((num % 1000) / 100) * ((num % 100) / 10) * ((num % 10) / 1);
}
else if (num >= 100) {
num = (num / 100) * ((num % 100) / 10) * ((num % 10) / 1);
}
else if (num >= 10) {
num = (num / 10) * ((num % 10) / 1);
}
else { ; }
return num;
}
void output(int start, int end, int gNum)
{
int i, num, transN, count = 0, gNumTotal = 0;
printf("numbers that process %d times\n", gNum);
for (i = start; i <= end; i++) {
num = i;
transN = transNumber(num);
while (transN > 10) {
count++;
}
}
if (count == gNum) {
printf("%d\n", i);
gNumTotal++;
}
else { ; }
printf("total numbers : %d numbers", gNumTotal);
return;
}
你必须在循环中反复调用transNumber()
。否则,transN
永远不会改变,因此循环永远不会结束。
打印 i
的代码需要在 for
循环内,并且需要在每个 while
之前将 count
重置回 0
循环。
for (i = start; i <= end; i++) {
num = i;
count = 0;
while (num > 10) {
num = transNumber(num);
count++;
}
if (count == gNum) {
printf("%d\n", i);
gNumTotal++;
}
}
你不需要:
else { ; }
在每个 if
之后。如果条件为 false 时不需要做任何事情,则将其保留。