如何在C中分别对小数点前后的数字求和?

时间:2014-12-01 21:02:12

标签: c decimal

我应该得到一个十进制数,并分别将整个部分数字和小数部分相加,

所以例如,如果我得到: 1321.0365 输出应为:7.14

我不应该在不使用数组的情况下这样做。 这是我到目前为止尝试做的,在从函数中获取数字之后,首先将两个部分分开,然后将十进制数乘以10,直到数字等于int部分。 然后我试着分别对每个部分求和,然后在我这样做之后,将小数部分除以数字等于int数。 理论上它听起来应该有效,但我想我在途中会错过一些东西。 这就是我到目前为止所做的:

double number;
double sumReal=0;
int wholePart;
int sumWhole=0;
int multiply=1;

number=getDecimalNumber();

wholePart=number;
number-=wholePart;

while(number!=(int)number)
 number*=10;

while (number!=0)
{
  sumReal+=(int)number%10;
  number/=10;
}

while (wholePart!=0)
{
  sumWhole+=(int)wholePart%10;
  wholePart/=10;
}

while(sumReal!=(int)sumReal)
  sumReal/10;

number=wholePart+sumReal;

不知何故,大多数部分看起来都有效,但是将实部乘以10总是得到0,而当总结真实部分和最后的数字时,我也得到0,这导致我输出0。

3 个答案:

答案 0 :(得分:2)

#include <stdio.h>

int main(){
    int ch;
    int n1 = 0, n2 = 0;
    while((ch=getchar())!= '.'){
        n1 += ch - '0';
    } 
    while((ch=getchar())!= '\n'){
        n2 += ch - '0';
    }
    printf("%d.%d\n", n1, n2);
    return 0;
}

答案 1 :(得分:0)

这样更容易:

  • 将数字用作字符串(在字符串上获取char *指针,这样就不会主动使用数组)
  • 拆分小数点分隔符 (你得到两个char *指针,每个字符串一个)
  • 通过char迭代一个字符串char(递增指针),转换int中的当前char并添加
  • 与第二个字符串相同
  • 你已经完成了

我强烈怀疑这是你老师想要你做的事情,而不仅仅是奇特的计算。

答案 2 :(得分:0)

here is one way to write the algorithm
It may still have bugs that will need the OPs attention


#include <math.h>

// prototypes
double getDoubleNumber(void);
double sumOfDigits( void );


double sumOfDigits()
{
    double doubleNumber = 0.0;

    double wholePart;
    double fractionPart;

    int sumWhole=0;
    int sumFraction = 0;

    double sumParts=0.0;

    // get the original number
    doubleNumber=getDoubleNumber();

    wholePart = trunc(doubleNumber);

    // calc fractional part
    fractionPart = doubleNumber - wholePart;

    // this may need modification due to inexact representation of value
    // move fractionPart to left of decimal point
    while(fractionPart > floor(fractionPart) )
    {
        fractionPart *= 10.0;
    }

    while( trunc(fractionPart) )
    {
        sumFraction += trunc( fmod( fractionPart, 10.0);
        fractionPart /= 10.0;
    }

    // move fractionPart back to right of decimal point
    while( trunc(sumFraction) )
    {
        sumFraction /= 10.0;
    }

    // calc sum of whole part digits
    while ( trunc(wholePart) )
    {
      sumWhole += trunc( fmod( wholePart, 10.0 ) );
      wholePart /= 10.0;
    }



    sumParts = sumWhole+sumFraction;

    return( sumParts );
}  // end function: sumOfDigits