#include <stdio.h>
int main()
{
int sum=0, prod=1, a, b;
printf("Enter a number: \n");
scanf("%d",&a);
while (a!=0)
sum = sum + a%10;
a = a/10;
while (b!=0)
prod = prod + b%10;
b = b/10;
printf("Sum=%d\nProd=%d\n", sum, prod);
return 0;
}
此C程序返回给定整数的数字的和与乘积,但是我希望有人为我分解它,而且当我运行它时,它不起作用,所以有人可以纠正我吗?
答案 0 :(得分:1)
%
是模运算,即,它提醒您除数除法。在您的情况下,操作% 10
有效地返回数字的最后一位。您将此数字加到prod
变量中,该变量代表数字的总和。对当前数字求和后,您将执行下一个主要操作/ 10
,它是整数除法,只删除数字的最后一位。
答案 1 :(得分:0)
您的代码缩进得很厉害,并且缺少必要的块定界符<Grid....
~~~
<Label Grid.Row="0" Grid.Column="1" HorizontalOptions="Start" VerticalOptions="Start" Text="{Binding Address1}" FontSize="12" TextColor="Black" />
<Label Grid.Row="0" Grid.Column="1" HorizontalOptions="Start" VerticalOptions="End" Text="{Binding City}" FontSize="10" TextColor="Black" />
<Label Grid.Row="0" Grid.Column="1" HorizontalOptions="End" VerticalOptions="End" Text="{Binding St}" FontSize="10" TextColor="Black" />
~~~
</Grid>
。此外,{}
尚未初始化,您需要计算总和,而不是数字的乘积。
这是更正的版本:
b
答案 2 :(得分:0)
从用户那里读取号码时,请读取一个字符串。
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int main(void) {
char buf[999];
while (fgets(buf, sizeof buf, stdin)) { // read a string rather than scanf an integer
buf[strcspn(buf, "\n")] = 0; // remove trailing newline
char *p = buf;
int invalidflag = (*p == 0);
unsigned sum = 0;
unsigned product = 1;
while (*p) {
if (isdigit((unsigned char)*p)) {
sum += *p - '0';
product *= *p - '0';
} else {
invalidflag = 1;
break;
}
p++;
}
if (invalidflag) {
printf("input = \"%s\" ==> INVALID INPUT\n", buf);
} else {
printf("input = \"%s\"; sum = %d; product = %d\n", buf, sum, product);
}
}
return 0;
}