帮助我 我在C程序中有一个代码,我需要检查一个数字在数字中显示的时间。 EX:321 总和:6(3 + 2 + 1)
EX2:3211 总和:6(3 + 2 + 1)
#include <stdio.h>
#define TEN 10
int main ()
{
int number=0, temp=0, sum=0, remainder=0;
do
{
printf("Enter number: ");
scanf("%d", &number);
}while (number<=0);
temp=number;
while(temp!=0)
{
remainder = temp % TEN;
sum = sum + remainder;
temp = temp/TEN;
}
printf("Sum of the numbers is: %d\n", sum);
return 0;
}
如何继续?
答案 0 :(得分:1)
您只需跟踪已覆盖的数字。为此,您可以保留一个大小为10的数组(每个数字一个),初始值为false
。覆盖数字时,将该数字标志更改为true
。并且每次检查数字是否被覆盖。
代码:
int isvisited[TEN] = {0};
while(temp!=0)
{
remainder = temp % TEN;
if(!isvisited[remainder])
{
isvisited[remainder] = 1;
sum = sum + remainder;
}
temp = temp/TEN;
}
这里,Integer数组用于跟踪每个数字是否被覆盖。跟踪每个数字点到数组的每个元素。
它将以0值初始化。
digit isvisited
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
现在假设访问了数字1,3和6。值将是
digit isvisited
0 0
1 1
2 0
3 1
4 0
5 0
6 1
7 0
8 0
9 0
您将检查isvisited[digit]
是否为0
,将isvisited[digit]
更改为1
并将其添加到总和中。如果其值为1
,则表示已将其添加到sum
,并继续执行下一个数字。
注意:在while循环中,最好检查(temp > 0)
而不是(temp !=0)
。
答案 1 :(得分:0)
你可以简单地创建一个包含10个元素的数组,并存储每个数字0..9(如果它出现在数字中)。然后你可以简单地将使用数组存在的数字相加。
#include <stdio.h>
#define TEN 10
int main ()
{
int number=0, temp=0, sum=0, remainder=0, i;
int ifElementPresent[TEN] = {0}; //stores 1 if digit (0..9) is present else 0; initialised to zero
do
{
printf("Enter number: ");
scanf("%d", &number);
}while (number<=0);
temp=number;
while(temp!=0)
{
remainder = temp % TEN;
ifElementPresent[remainder] = 1; //if a digit is present in the number
temp = temp/TEN;
}
for(i = 0; i<TEN; i++) // in order to calculate the sum
{
if(ifElementPresent[i] == 1)sum += ifElementPresent[i];
}
printf("Sum of the numbers is: %d\n", sum);
return 0;
}