21xrx.com
2024-11-05 16:39:44 Tuesday
登录
文章检索 我的文章 写文章
C++求小数各位数字之和的算法
2023-07-05 08:18:34 深夜i     --     --
C++ 小数 各位数字 算法

在C++编程中,有时需要求小数各位数字之和。这个问题看起来比较简单,但是算法有很多种。本文将介绍几种常用的算法。

第一种算法是通过字符串处理实现的。我们将小数转化成字符串形式,然后遍历字符串,将每一位数字依次相加即可。具体代码如下:


double num = 3.1415926;

string str = to_string(num);

int sum = 0;

for(int i=0; i<str.length(); i++){

  if(str[i] >= '0' && str[i] <= '9'){

    sum += str[i] - '0';

  }

}

cout << "小数" << num << "的各位数字之和为:" << sum << endl;

第二种算法是通过数学运算实现的。我们将小数取整,然后逐位取余求和。具体代码如下:


double num = 3.1415926;

int integerPart = num;

double decimalPart = num - integerPart;

int sum = 0;

while(integerPart > 0){

  sum += integerPart % 10;

  integerPart /= 10;

}

while(decimalPart > 0){

  decimalPart *= 10;

  sum += int(decimalPart) % 10;

  decimalPart -= int(decimalPart);

}

cout << "小数" << num << "的各位数字之和为:" << sum << endl;

第三种算法是通过递归实现的。我们将小数取整,然后通过递归调用函数依次求和。具体代码如下:


double num = 3.1415926;

int sum = 0;

function<void(int)> getSum = [&](int n){

  if(n > 0){

    sum += n % 10;

    getSum(n / 10);

  }

};

getSum(int(num));

getSum(int(num * 1000000) % 1000000); // 小数部分乘以10^6再取余后递归求和

cout << "小数" << num << "的各位数字之和为:" << sum << endl;

以上三种算法中,第一种算法虽然代码简单,但效率较低,尤其是在小数位较多时。第二种算法相比第一种算法,效率有所提高,并且能处理较长的小数。第三种算法在处理小数位很多的情况下,效率更高,但需要使用递归调用,对于新手来说可能不太容易理解。因此,在实际应用中,可以根据实际情况选择合适的算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复