数字总和程序不能正确回答c中的负数
我尝试了这个方法,它可以很好地处理正整数,但是当我输入一个负整数时,比如:-323=>-8 它应该是-3+2+3=2,而不是-3-2-3=-8数字总和程序不能正确回答c中的负数,c,C,我尝试了这个方法,它可以很好地处理正整数,但是当我输入一个负整数时,比如:-323=>-8 它应该是-3+2+3=2,而不是-3-2-3=-8 我尝试使用abs函数,但它仍然不能正常工作。您可以使用条件运算符存储符号值,如int sign=(n>=0?1:-1)如下所示- printf("Sum Digit Program\n"); int n,re, sum = 0; printf("Enter an integer n="); scanf("%d", &n); whi
我尝试使用abs函数,但它仍然不能正常工作。您可以使用条件运算符存储
符号值,如int sign=(n>=0?1:-1)代码>如下所示-
printf("Sum Digit Program\n");
int n,re, sum = 0;
printf("Enter an integer n="); scanf("%d", &n);
while(n){
re = n % 10;
sum = sum + re;
n = n / 10;
}
printf("Sum digit = %d", sum);
return 0;
}
#包括
#包括
/*
*@返回数字和的简短逻辑
*/
整数数字和(整数n)
{
整数符号=(n>=0?1:-1);
整数和=0;
n*=符号;
while(n)
{
如果(n<10)
总和+=(符号*(n%10));
其他的
总和+=n%10;
n/=10;
printf(“总和:%d,n:%d\n”,总和,n);
}
printf(“总和:%d,n:%d\n”,总和,n);
回报金额;
}
/*
*@简短的驱动程序功能
*/
int main(int argc,char*argv[])
{
int num=-323;
printf(“总和:%d\n”,数字总和(num));
返回0;
}
其思想是将数字的符号存储到一个单独的变量中,并在n<10
OP几乎拥有它时使用它。只需将MSDigit视为已签名。所有其他数字,使用abs(rem)
。适用于INT\u MIN
#include <stdio.h>
#include <stdlib.h>
/*
* @brief Logic for returning sum of digits
*/
int digi_sum(int n)
{
int sign = (n >= 0 ? 1 : -1);
int sum = 0;
n *= sign;
while (n)
{
if (n < 10)
sum += (sign * (n % 10));
else
sum += n % 10;
n /= 10;
printf("Sum: %d, n: %d\n", sum, n);
}
printf("sum: %d, n: %d\n", sum, n);
return sum;
}
/*
* @brief Driver function
*/
int main(int argc, char *argv[])
{
int num = -323;
printf("Sum: %d\n", digi_sum(num));
return 0;
}
您可以在循环的第一行添加一个条件,以确保当n<10
时,sum
到目前为止为正,然后它将对最小的数字进行减法(如果它也有)。那么您的循环应该如下所示:
printf("Sum Digit Program\n");
int sum = 0;
printf("Enter an integer n=");
scanf("%d", &n);
while (n) {
int re = n % 10;
n = n / 10;
sum += n ? abs(re) : re; // At MSDigit when n==0
}
printf("Sum digit = %d", sum);
while(n){
如果(abs(n)<10){
总和=绝对值(总和);
}
re=n%10;
sum=sum+re;
n=n/10;
}
我认为第一个数字需要一个先决条件。
用if-then-else。
解决了的
我更改了输出以查看值
while(n){
if (abs(n) < 10) {
sum = abs(sum);
}
re = n % 10;
sum = sum + re;
n = n / 10;
}
包括
内部主(空)
{
int-re,n;
整数和=0;
printf(“总和数字程序”);
printf(“输入整数n=”);
scanf(“%d”和“&n”);
while(n)
{
如果(abs(n)<10){
总和=绝对值(总和);
}
re=(n%10);
sum=sum+re;
n=n/10;
printf(“\n re=%d,n=%d\n”,re,n);
}
printf(“\n总和=%d\n”,总和);
返回0;
}
使用n=abs(n/10)代替n=n/10
include<stdio.h>
int main(void)
{
int re,n;
int sum =0 ;
printf("Sum Digit Program \n");
printf("Enter an integer n= ");
scanf("%d", &n);
while(n)
{
if (abs(n) < 10) {
sum = abs(sum);
}
re= (n % 10);
sum = sum + re;
n= n / 10;
printf ("\n re = %d , n= %d \n", re, n);
}
printf ("\n sum= %d \n",sum);
return 0;
}
#包括
#包括
main()
{
printf(“总和数字程序”);
int n,re,和=0;
printf(“输入整数n=”);scanf(“%d”,&n);
while(n)
{
re=n%10;
sum=sum+re;
n=abs(n/10);
}
printf(“总和位数=%d”,总和);
返回0;
}
在我看来,你希望while循环的结尾是n=abs(n/10)
第一次使用这种方式将其作为-ve处理,随后的所有时间都将其视为正数。在我看来,将-323的数字总和设为-3+2+3有点牵强。你确定这是你真正想要的吗?假设我把它写成-0323(仍然是以10为基数),你想改变答案吗?从数学上讲,这是胡说八道。角格:n*=符号当n==INT\u MIN
时,code>为UB。
#include <stdio.h>
#include <math.h>
main()
{
printf("Sum Digit Program\n");
int n,re, sum = 0;
printf("Enter an integer n="); scanf("%d", &n);
while(n)
{
re = n % 10;
sum = sum + re;
n =abs(n/10);
}
printf("Sum digit = %d", sum);
return 0;
}