我应该得到一个十进制数,并分别将整个部分数字和小数部分相加,
所以例如,如果我得到: 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。
答案 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)
这样更容易:
我强烈怀疑这是你老师想要你做的事情,而不仅仅是奇特的计算。
答案 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